Я создал небольшой пользовательский опрос с этой таблицей, в которой сохраняются ответы пользователей:
useranswers
- Я бы
- Идентификатор пользователя
- question_id
- answer_option
- answer_value
Поскольку некоторые из вопросов имеют множественный выбор, а другие нет, я выбрал два поля вместо одного для хранения выбранных опций (answer_option и answer_value). Используются только флажки и переключатели, поэтому answer_value всегда равно 1 или 0, а answer_option имеет идентификатор элемента checkbox / radio.
Теперь я хотел бы провести тестирование производительности, например на question_id 1. Например, я хочу увидеть процент от того, сколько пользователей выбрали вариант 'option_a' или 'option_b'. Тем не менее, я сейчас совсем запутался, как это сделать? Возможно ли это сделать одним запросом, и если да, то как?
Поскольку некоторые пользователи могут уйти во время опроса, я не могу посчитать пользователей, чтобы получить это в качестве общего значения. Поэтому я сделал следующее, чтобы получить общую стоимость:
SELECT COUNT(*) FROM `useranswers` WHERE `question_id` = '1' AND answer_option = 'option_a'
Это дает мне общее количество пользователей, принявших участие в question_id 1. Теперь вопрос заключается в том, как подсчитать количество пользователей, выбравших option_a или option_b.
Когда я использую этот запрос:
SELECT FROM useranswers WHERE (answer_option = 'option_a' AND answer_value = 1) OR (answer_option = 'option_b' AND answer_value = 1)
Однако этот запрос возвращает мне 4, пока есть только три пользователя. Я думал, что это будет решено путем добавления GROUP BY user_id, но это не сработало. Вывод того, где три строки, что правильно, но я хотел вернуть одно значение.
Кстати, utdvalue всегда уникален, поэтому я не использовал question_id во втором запросе
Теперь дело в том, что если я исправлю второй запрос, я смогу рассчитать процент в PHP, но для этого мне понадобится два запроса. Поэтому мне было интересно, есть ли у кого-нибудь предложения о том, как сделать это лучше и, возможно, сделать это одним запросом.