0

submit_answersテーブル とAnswersテーブルがあります

submit_answersにはidがあり、ansフィールド ansは、「18,19,20,22,23,25」などのカンマ区切りのデータを含む varchar(255) フィールドです。

これらの数値はすべて、回答テーブルの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"

これらのテーブルに参加して、 submit_answersに最も多く表示される上位 5 項目を確認するにはどうすればよいですか。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 に答える