English 中文(简体)
MYSQL:复杂查询问题
原标题:
  • 时间:2009-04-03 18:03:36
  •  标签:

我正在处理民意调查:每个民意调查都有很多选项,用户可以在民意调查中投票一次。因此,我有一个包含以下字段的投票表:

  • id (id of the vote)
  • option_id (id of the poll option chosen)
  • user_id (id of the user)
  • poll_id (id of the poll)

所以我要做的是:给定一个poll_id数组,我想让一个查询为每个民意调查返回投票最多的选项。因此,如果我给出1的poll_;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;

这几乎奏效了。。。但为我提供了所有投票选项,并为每个投票提供相应的投票,而不仅仅是投票最多的选项。如果有人有什么想法,我真的很感激。谢谢。

问题回答
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)

我认为你不需要自我加入来解决这个问题,但夸斯诺伊的答案似乎是正确的。

Quassnoi的答案就可以了。你不需要加入表格,只需要使用count(*)运算来返回总和,然后按该总和排序,看看谁做得最好。GROUP BY告诉mysql引擎要计算哪些类别,在您的情况下,要计算不同的投票选项。

这样的东西行吗?

SELECT count({$row[ k_id ]}) as k_page 
FROM keywords_relations 
WHERE k_id =  {$row[ k_id ]}  AND percent >  {$row[ percent ]}  
ORDER BY DESC




相关问题
热门标签