Я борюсь с задачей, которая может быть очень простой, но мне трудно ее понять. У меня есть две таблицы базы данных:
options_table
option_id | option_name | question_id |
1 | opt one | 4 |
2 | opt two | 4 |
3 | opt three | 4 |
4 | opt four | 4 |
и voice_table
question_id | survey_id | option_id |
4 | 1 | 1 |
4 | 1 | 2 |
4 | 1 | 2 |
4 | 1 | 1 |
4 | 1 | 3 |
4 | 1 | 2 |
Из этого примера у нас есть 2 голоса по варианту 1, 3 голоса по варианту 2 и 1 голос по варианту 3, но ни одного по варианту 4
Я хотел бы получить название всех опций с относительным количеством, но я не могу получить опцию без голосов. Я уверен, что я что-то упускаю, это конец рабочего дня, и я должен быть уставшим.
Я пробовал что-то вроде:
SELECT o.option_name, count(*) as cnt
FROM votes_table AS v
JOIN options_table AS o
ON o.option_id = v.option_id
WHERE v.survey_id = 1
GROUP BY o.option_name
но я просто получаю
option_name | option_id | cnt
opt one | 1 | 2
opt two | 2 | 3
opt three | 3 | 1
Как мне получить также "опт четыре"? Поэтому я могу правильно отобразить все результаты опроса, включая опцию, за которую никто не голосовал. Я также пытался использовать OUTER JOIN, но безрезультатно.
Мне стыдно за это, может показаться глупым вопросом, но мне еще многое предстоит узнать о базах данных и отношениях