我正在使用民意调查:每个民意调查都有很多选项,用户可以在民意调查中投票一次。因此,我有一个'投票'表,其中包含以下字段:
所以这就是我要做的事情:给定一个poll_ids数组,我希望有一个查询返回每个投票的最多投票选项。因此,如果我给出poll&id的1& 2,我希望获得民意调查中投票最多的选项1&我尝试过以下方法:
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;
这几乎可以解决问题......但是为我提供了所有轮询选项,并为每个提供的投票提供相应的投票,而不仅仅是投票最多的选项。如果有人有任何想法,我真的很感激。感谢。
答案 0 :(得分:4)
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)
答案 1 :(得分:0)
我认为你不需要自我加入来解决这个问题,但Quassnoi的回答似乎是正确的。
答案 2 :(得分:0)
Quassnoi的回答将会这样做。您不需要加入表,您只需要使用count(*)操作返回总和,然后按该总和排序以查看谁做得最好。 GROUP BY告诉mysql引擎要计算哪些类别,在您的情况下计算不同的轮询选项。
答案 3 :(得分:0)
会这样吗?
SELECT count({$row['k_id']}) as k_page
FROM keywords_relations
WHERE k_id = '{$row['k_id']}' AND percent > '{$row['percent']}'
ORDER BY DESC