SQL: выберите количество записей в правой таблице с объединениями - PullRequest
0 голосов
/ 06 июля 2018

У меня есть 2 таблицы, одна для мобильных телефонов, другая для обзоров В таблице отзывов хранятся отзывы о конкретном мобильном телефоне и его мобильном идентификаторе.

Структура мобильного стола.

mobile_id | mobile_name

Структура таблицы отзывов.

review_id | mobile_id | review_body

Пока я написал этот запрос.

SELECT  c.*, p.review_body
FROM   ((select mobile_id, mobile_name from mobiles 
WHERE brand_id=1 limit 0,5) c)
left JOIN
(
   SELECT  mobile_id,
   MAX(review_id) MaxDate
   FROM    reviews
   GROUP BY mobile_id
) MaxDates ON c.mobile_id = MaxDates.mobile_id left JOIN
reviews p ON   MaxDates.mobile_id = p.mobile_id
AND MaxDates.MaxDate = p.review_id

Этот запрос возвращает первые 5 мобильных телефонов из мобильной таблицы и их последний (один) отзыв из обзорной таблицы. Это результат, который он возвращает.

mobile_id | mobile_name | review_body

Вопрос: Но я также хочу с ним провести обзор. review_count должно быть равно общему количеству отзывов, которые мобильный телефон имеет в таблице отзывов против своего mobile_id.

Поэтому, пожалуйста, скажите мне, как это можно сделать с помощью одного запроса, который у меня уже есть. Буду признателен за любую помощь, так как я пытаюсь сделать это с 24 часов.

1 Ответ

0 голосов
/ 06 июля 2018

Я думаю, что это будет работать

SELECT  c.*, p.review_body, MaxDates.review_count
FROM   ((select mobile_id, mobile_name from mobiles 
WHERE brand_id=1 limit 0,5) c)
left JOIN
(
   SELECT  mobile_id,count(review_id) review_count,
   MAX(review_id) MaxDate
   FROM    reviews
   GROUP BY mobile_id
) MaxDates ON c.mobile_id = MaxDates.mobile_id left JOIN
reviews p ON   MaxDates.mobile_id = p.mobile_id
AND MaxDates.MaxDate = p.review_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...