Запрос с подзапросами - MySQL
Формулировка задачи:
Здравствуйте, имеются две таблицы: рецензии и оценки к ним. Оценки могут иметь значение только 1 и 0 (условные "Да" и "Нет"). Пытаюсь составить запрос, который бы выводил поля из таблицы рецензии и количество оценок со значениями 1 и 0, на основе которых бы вычислялся рейтинг рецензии. Делаю так, потому что не хочу переписывать уже имеющейся код.
Мой запрос работает некорректно: вместо вывода нужных значений он во все поля вставляет единицы. Вот как он выглядит:
Также привожу схему этих двух таблиц.
SELECT reviews.reviews_id, DATE_FORMAT(date_review, '%H:%i | %d.%m.%Y'), message, login, plus, minus, mov_ocenka, (SELECT IFNULL(COUNT(rev_ocenka), 0) FROM ocenka_reviews LEFT JOIN reviews ON reviews.reviews_id=ocenka_reviews.reviews_id AND rev_ocenka=1 GROUP BY ocenka_reviews.reviews_id LIMIT 1), (SELECT IFNULL(COUNT(rev_ocenka), 0) FROM ocenka_reviews LEFT JOIN reviews ON reviews.reviews_id=ocenka_reviews.reviews_id AND rev_ocenka=0 GROUP BY ocenka_reviews.reviews_id LIMIT 1) FROM users, reviews WHERE movies_id=1 AND reviews.user_id=users.user_id ORDER BY reviews_id
Решение задачи: «Запрос с подзапросами»
textual
Листинг программы
select r.reviews_id, (select count(*) from ocenka_reviews o where o.reviews_id=r.reviews_id and rev_ocenka=0) `кол-во оценок со значение 0`, (select count(*) from ocenka_reviews o where o.reviews_id=r.reviews_id and rev_ocenka=1) `кол-во оценок со значение 1` from reviews r;
Объяснение кода листинга программы
- Запрос выбирает два подзапроса:
- Первый подзапрос считает количество оценок со значением 0.
- Второй подзапрос считает количество оценок со значением 1.
- Результатом запроса являются два столбца:
reviews_id
- идентификатор отзыва.кол-во оценок со значение 0
- количество оценок со значением 0.кол-во оценок со значение 1
- количество оценок со значением 1.
- Оба подзапроса используют таблицу
ocenka_reviews
для подсчета оценок. - В обоих подзапросах используется условие
o.reviews_id=r.reviews_id
, которое связывает данные из таблицыreviews
с данными из таблицыocenka_reviews
. - Первый подзапрос использует условие
rev_ocenka=0
, чтобы выбрать только оценки со значением 0. - Второй подзапрос использует условие
rev_ocenka=1
, чтобы выбрать только оценки со значением 1. - Оба подзапроса используют функцию
count(*)
, чтобы подсчитать количество выбранных оценок. - Результат обоих подзапросов выводится в итоговом запросе.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д