MYSQL: сложный вопрос-запрос

Я работаю с опросами: у каждого опроса есть много вариантов, и пользователи могут голосовать в опросах один раз. Таким образом, у меня есть таблица "голосов" со следующими полями:

  • id (идентификатор голоса)
  • option_id (идентификатор выбранного варианта опроса)
  • user_id (идентификатор пользователя)
  • poll_id (идентификатор опроса)

Итак, вот что я пытаюсь сделать: учитывая массив poll_id, я хочу, чтобы запрос возвращал вариант, за который проголосовали больше всего для каждого опроса. Таким образом, если я даю poll_id 1 и 2, я хочу вернуть наибольшее количество голосов по вариантам опросов 1 и 2. Я пробовал следующее:

SELECT
   t1.poll_id,
   t1.option_id,
   count(t1.option_id) AS num_votes,
   t2.option_id AS user_vote 
FROM 
   votes AS t1 
JOIN 
   votes AS t2 
ON 
   t1.id = t2.id
WHERE 
   t1.poll_id IN (30,40)
GROUP BY
   t1.option_id;

Это почти помогает... но дает мне все варианты опроса с соответствующими голосами для каждого предоставленного опроса, а не только вариант с наибольшим количеством голосов. Если у кого есть идеи, буду очень признателен. Спасибо.


person Community    schedule 03.04.2009    source источник
comment
Почему вы снова объединяете голоса с голосами?   -  person Pablo Santa Cruz    schedule 03.04.2009
comment
Я второй вопрос Пабло. Зачем ты это делаешь?   -  person Welbog    schedule 03.04.2009
comment
Я думаю, он имел в виду присоединиться к опросам, а не к голосам.   -  person Quassnoi    schedule 03.04.2009


Ответы (4)


Я не думаю, что вам понадобится самостоятельное соединение, чтобы решить эту проблему, но ответ Quassnoi кажется правильным.

person Pablo Santa Cruz    schedule 03.04.2009

Ответ Quassnoi сделает это. Вам не нужно присоединяться к таблице, вам просто нужно использовать операцию count(*), чтобы вернуть сумму, а затем упорядочить по этой сумме, чтобы увидеть, кто лучше. GROUP BY сообщает движку mysql, какие категории учитывать, в вашем случае для подсчета различных вариантов опроса.

person Fire Crow    schedule 03.04.2009

Что-то вроде этого подойдет?

SELECT count({$row['k_id']}) as k_page 
FROM keywords_relations 
WHERE k_id = '{$row['k_id']}' AND percent > '{$row['percent']}' 
ORDER BY DESC
person Speedy Wap    schedule 16.02.2011

person    schedule
comment
Тогда примите ответ, это даст мне 15 очков повторения, которых я так жажду! - person Quassnoi; 03.04.2009