0

さて、MySQLはあまり得意ではありませんが、基本的なことはできます...だから今は助けが必要です。私は2つのテーブルを持っています-質問(いくつかの質問と利用可能な回答が保存されている)とログ(前に回答された質問からのログが保存されている)

質問-

questionId,     question,                answer1...balbalba
1              'question balba'         'Avaliable answer1'
2              'question2 blaba'        'Other answer'

ログ-

id, questionId, userId
1   1           123456  

1userIdで答えられるここに保存されますquestionId

したがって、ユーザー「123456」が回答されていない「質問」からランダムな質問を見つけるクエリが必要です。あなたが私を助けてくれることを願っています...

4

1 に答える 1

1
SELECT q.questionId
FROM questions AS q
LEFT OUTER JOIN log AS l ON q.questionId = l.questionId AND l.userId = 123456
WHERE l.id IS NULL

これにより、ユーザー123456が回答していない質問が表示されます。

それらの1つをランダムに選択するには、次のように追加します

ORDER BY RAND()
LIMIT 1

クエリに。

の問題ORDER BY RAND()は、スケーリングがうまくいかないことです。ただし、結合条件は、結果セットのサイズを縮小するのにすでに優れています(質問ごとに最大で1つの結果が得られます)。質問の数が少ない場合(約100)、パフォーマンスへの影響について心配する必要はありませんORDER BY RAND()。質問がたくさんある場合は、質問をご覧ください。MySQLのORDER BY RAND()関数を最適化するにはどうすればよいですか?代替案について。

于 2013-03-25T19:57:50.330 に答える