如何使用mysql查询获得前5个选定项目?

时间:2013-03-20 21:16:33

标签: mysql sql join

我有一张桌子 submitted_answers 和表回答

submitted_answers

我有 id ans 字段 ans 是一个varchar(255)字段,包含逗号分隔的数据,例如“18,19,20,22,23,25”

所有这些数字都与答案表中的 ID 相关联 示例表结构

submitted_answers
id (int)    ans(varchar(255))
1           "18, 19"
2           "21, 22"

answers
id  ans
18  "Money"
19  "Gold"
20  "Whatever"
21  "Whatever2"

如何加入这些表格,看看 submitted_answers ans 字段中哪些前5个项目最多。

2 个答案:

答案 0 :(得分:1)

诚然,您的数据库结构很糟糕。您不应该在关系数据库中将id列表表示为逗号分隔的字符串。

也就是说,通过巧妙地使用on子句,你可以做你想做的事情:

select a.id, a.ans, count(*) as cnt
from submitted_answers sa join
     answers a
     on concat(', ', sa.ans, ', ') like concat('%, ', a.id, ', %')
group by a.id, a.ans
order by cnt desc
limit 5

答案 1 :(得分:0)

你走了:

    SELECT answer_num, COUNT(*) AS magnitude 
FROM answers 
GROUP BY answer_num 
ORDER BY magnitude DESC
LIMIT 5

工作示例: http://sqlfiddle.com/#!2/80a68/2

请注意我在那里设置数据库的方式,您可能需要考虑这种类型的设置,以获得用户和用户答案的​​多对多关系。