2

現在、次のテーブルがあります

  • 質問
  • 回答
  • ユーザー
  • 投票

サンプルテーブルセットは質問テーブルのようになります:

question_id  | question
1            | Question #1
2            | Question #2
3            | Question #3
4            | Question #4
5            | Question #5

回答表:

answer_id      | answer      | user_id      | question_id
1              | Answer #1   | 2            | 1
2              | Answer #2   | 2            | 2
3              | Answer #3   | 3            | 2
4              | Answer #4   | 1            | 3
5              | Answer #6   | 1            | 2
6              | Answer #7   | 2            | 5
7              | Answer #8   | 1            | 5
8              | Answer #9   | 3            | 1
9              | Answer #10  | 2            | 5

ユーザー表:

user_id   | name 
1         | user #1
2         | user #2
3         | user #3

投票表:

vote_id   | vote_type   | user_id  | answer_id
1         | 1           | 1        | 1
2         | 0           | 3        | 1
3         | 0           | 3        | 8
4         | 1           | 2        | 3
5         | 1           | 2        | 4
6         | 0           | 1        | 4
7         | 1           | 3        | 3
8         | 0           | 1        | 5
9         | 1           | 1        | 2

ランダムな回答とそれが受け取った投票の総数を使用して、各項目 (回答がないものでも) を 1 回表示できるクエリを作成するのに助けが必要です。

結果の例:

[Question 1 | Answer_id = 8   | user_id = 3   | total votes: 1  ]
[Question 2 | Answer_id = 3   | user_id = 3   | total votes: 2  ]
[Question 3 | Answer_id = 4   | user_id = 1   | total votes: 2  ]
[Question 4 | Answer_id = n/a | user_id = n/a | total votes: n/a]
[Question 5 | Answer_id = 10  | user_id = 2   | total votes: 0  ]

また、クエリを更新すると、ランダムな回答を持つ同じ質問が出力されます (別の回答が利用可能な場合)。

どんな助けにも感謝します。

ありがとう。

4

2 に答える 2

4

You can try this solution:

SELECT a.question, a.answer_id, a.user_id, a.totalvotes
FROM
(
    SELECT a.question, b.answer_id, c.user_id, COUNT(d.vote_id) AS totalvotes
    FROM questions a
    LEFT JOIN answers b ON a.question_id = b.question_id
    LEFT JOIN users c ON b.user_id = c.user_id
    LEFT JOIN votes d ON b.answer_id = d.answer_id
    GROUP BY a.question, b.answer_id
    ORDER BY RAND()
) a
GROUP BY a.question

SQLFiddle Demo

^ You can keep hitting the "Run SQL" button and different answers will appear.

于 2012-07-13T05:28:22.417 に答える
2

クエリで使用できORDER BY RAND()ます。

于 2012-07-13T05:05:39.600 に答える