MYSQL: сложный вопрос о запросе - PullRequest
1 голос
/ 03 апреля 2009

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

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

Итак, вот что я пытаюсь сделать : Учитывая массив poll_ids, я хочу, чтобы запрос возвращал опцию с наибольшим количеством голосов для каждого опроса. Таким образом, если я укажу poll_id's 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;

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

Ответы [ 4 ]

4 голосов
/ 03 апреля 2009
SELECT  (
        SELECT  option_id
        FROM    votes v
        WHERE   v.poll_id = p.id
        GROUP BY
                option_id
        ORDER BY
                COUNT(*) DESC
        LIMIT 1
        ) cnt
FROM    polls p
WHERE   p.id IN (1, 2)
0 голосов
/ 17 февраля 2011

Будет ли что-то подобное делать

SELECT count({$row['k_id']}) as k_page 
FROM keywords_relations 
WHERE k_id = '{$row['k_id']}' AND percent > '{$row['percent']}' 
ORDER BY DESC
0 голосов
/ 03 апреля 2009

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

0 голосов
/ 03 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...