#mysql
#mysql
Вопрос:
У меня есть 2 таблицы, одна с ответами на опрос и одна с голосами:
DESC polls;
Field Type Null Key Default Extra
id int(11) NO PRI NULL auto_increment
pollId int(11) NO MUL NULL
answer varchar(150) YES NULL
DESC votes;
Field Type Null Key Default Extra
id int(11) NO PRI NULL auto_increment
pollId int(11) NO MUL NULL
answerId int(11) NO MUL NULL
userId int(11) NO MUL NULL
Я пытаюсь получить следующие результаты со всеми ответами и голосами:
pollId answerId numberOfVotes
1 1 20
1 2 10
1 3 0
Я попробовал правильное объединение голосов с ответами, но это не работает:
SELECT answers.id, COUNT(votes.answerId) FROM answers JOIN votes ON votes.pollId = answers.pollId GROUP BY votes.pollId;
Ответ №1:
используйте левое соединение
SELECT polls.pollId,polls.id,COUNT(userid) as counts
FROM polls left JOIN votes ON votes.pollId = polls.pollId and
polls.id=votes.answerId
GROUP BY polls.pollId,polls.id order by polls.id
ВЫВОД:
pollId id counts
14 17 0
14 18 2
14 19 0
14 20 0
Комментарии:
1. Я попробовал это, это дает мне неверный результат, где говорится, что ответы с 0 голосами имеют голоса.
2. можете ли вы добавить некоторые образцы данных, тогда их будет легко получить @NodirNasirov
3.
select * from answers; id pollId answer 17 14 black 18 14 brown 19 14 white 20 14 bold select * from votes; id pollId answerId userId 5 14 18 3 6 14 18 2
4. @NodirNasirov, и из этих строк какой ваш ожидаемый результат?
5.
answerId countVotes 17 0 18 2 19 0 20 0