Mysql и чудо внутренних / внешних объединений, где я получаю только один ряд, а не много - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть этот запрос, который я запускаю для mysql:

SELECT video.title AS title, 
       video.url AS url, 
       video.id AS id, 
       video.description AS description,
       avg(BodyPartsVideosUser.rating) AS rating 
FROM videos AS video  
   LEFT JOIN body_parts_videos as BodyPartsVideo on BodyPartsVideo.video_id = video.id 
   LEFT JOIN  body_parts_videos_users as BodyPartsVideosUser on BodyPartsVideo.id = BodyPartsVideosUser.body_parts_video_id 
WHERE BodyPartsVideo.body_part_id =  39  
GROUP BY BodyPartsVideosUser.body_parts_video_id 
ORDER BY rating DESC ;

Теперь проблема в том, что я получаю обратно одну строку с этим запросом.

Однако моя таблица видеоимеет три совершенно разные записи, и моя таблица body_parts_videos имеет три записи, соответствующие таблице видео.Однако столбец body_part_id содержит 39 для каждой записи.

Таблица body_parts_videos_users пуста.

Как изменить этот запрос, чтобы получить все три строки, возвращаемые?

body_parts_videos:

+----+--------------+----------+
| id | body_part_id | video_id |
+----+--------------+----------+
|  1 |           39 |       26 |
|  3 |           39 |       28 |
|  4 |           39 |       29 |
+----+--------------+----------+

videos:

+----+---------+-------------+--------------------------------------+-------------+----------
| id | title   | description | user_id  | url         | filename | created    | modified   |
+----+---------+-------------+--------------------------------------+-------------+----------
| 26 | new vid | dd          | 1        | eMvu0Cbi040 | a.avi    | 2011-11-23 | 2011-11-23 |
| 28 | new vid | dd          | 2        | ETyBso2SHJM | b.avi    | 2011-11-23 | 2011-11-23 |
| 29 | title   | ddd         | 3        | 2Ud41iWKUIg | c.avi    | 2011-11-23 | 2011-11-23 |
+----+---------+-------------+--------------------------------------+-------------+----------

body_parts_videos_users: empty

Я хочу выбрать из пустой таблицы body_parts_videos_users, потому что, когда есть результаты, я хочу ихпоявляться первым.Пустой ряд каким-то волшебным образом становится равным нулю, но я в порядке.

Есть идеи, что я делаю не так?Ой!Вот что я получаю, когда запускаю запрос:

+---------+-------------+----+-------------+--------+-
| title   | url         | id | description | rating | 
+---------+-------------+----+-------------+--------+-
| new vid | eMvu0Cbi040 | 26 | dd          |   NULL | 
+---------+-------------+----+-------------+--------+-

Вот что я ожидал:

+---------+-------------+----+-------------+--------+-
| title   | url         | id | description | rating | 
+---------+-------------+----+-------------+--------+-
| new vid | eMvu0Cbi040 | 26 | dd          |   NULL | 
+---------+-------------+----+-------------+--------+-
| new vid | ETyBso2SHJM | 28 | dd          |   NULL | 
+---------+-------------+----+-------------+--------+-
| title   | 2Ud41iWKUIg | 29 | ddd         |   NULL | 
+---------+-------------+----+-------------+--------+-

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 23 ноября 2011

Я думаю, проблема в том, что ваша таблица body_parts_videos_users пуста. измените GROUP BY на GROUP BY body_parts_videos.body_part_id,body_parts_videos.video_id

...