Mysql присоединиться к запросу, получить список записей и присоединяющихся голосов - PullRequest
2 голосов
/ 08 ноября 2011

Я запускаю соединение на двух таблицах, но у меня возникли некоторые проблемы.

Интересующие таблицы: «фото», «голосование», «неделя»

Я пытаюсь выполнить запрос, который выводит список фотографий, включенных в него, общее количество голосов за активную "неделю".

Таблица 'голосования' состоит из следующих внешних ключей: photo_id, week_id, user_id. Это позволяет мне определить, в какую «неделю» было отдано голосование. Кроме того, представьте, что неделя - это сущность, а не таймфрейм… это просто запись в таблице «недели».

Это то, что я имею до сих пор:

SELECT *, COUNT(*) as `weekly_votes` 
FROM (`photo`) 
JOIN `vote` ON `vote`.`photo_id` = `photo`.`id` 
WHERE `vote`.`week_id` = '6' 
GROUP BY `photo`.`id`

Проблема в том, что при этом будет выведен список фотографий, у которых есть голоса в таблице голосов за указанную неделю, но НЕТ фотографий не возвращается, если на этой неделе не было подано ни одного голоса.

В основном:

 WHERE `vote`.`week_id` = '6'

нужно применять только к материалам в операторе объединения, а не препятствовать ограничению количества возвращаемых фотографий. Я знаю, что, по крайней мере, мне нужно использовать какое-то OUTER соединение, но я думаю, что предложение WHERE по-прежнему будет препятствовать его работе.

Надеюсь, мой вопрос имеет смысл ...

1 Ответ

3 голосов
/ 08 ноября 2011

Вам нужно внешнее соединение.Поскольку вы хотите применить только условие where к внешнему соединению, вам нужно упомянуть week_id в условии соединения.

LEFT JOIN `vote` ON `vote`.`photo_id` = `photo`.`id` AND `vote`.`week_id` = '6' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...