0

我有一个表格 submit_answers和一个表格answers

submit_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"

我如何加入这些表格并查看哪些前 5 个项目出现在 submit_answers 中最多ans字段。

4

2 回答 2

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
于 2013-03-20T21:31:12.763 回答
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

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

于 2013-03-20T21:31:01.003 回答