16,000 エントリのテーブルがあります。
ランダムな 44 エントリを抽出
したいのですが、同じエントリを (これまでに) 何度も繰り返したくない
ので、既に使用されている「ID」をコンマとして保持するユーザーごとのリストがあります。で区切られたテーブル内の文字列。
そのリストを使用して SELECT ... NOT IN (used_IDs)
問題は、このリストが大きくなりすぎて、サイズが原因で SQL 呼び出しが失敗することです。
それをより便利に行う方法について何か考えはありますか?
Questions table:
+------+-------+-------+
| id | Qtext | Tags |
+------+-------+-------+
Test table:
+------+-------+
| id | QIDs |
+------+-------+
Results table:
+------+-------+-------+
| id | tID | uID |
+------+-------+-------+
結果テーブルに基づいて質問テーブルから一意のランダム値を選択する必要があります。(テスト ID を質問 ID に関連付けます)
現在使用しようとしています:
SELECT DISTINCT `questions`.`ID`
FROM `questions`, `tests`, `results`
WHERE
`questions`.`ID` NOT IN (`tests`.`qIDs`)
AND `results`.`uID` = 1 AND `tests`.`ID` = `results`.`tID`
AND 4 IN ( `questions`.`tags`)
AND "http://www.usmlestep2qna.com" = `provider`
ORDER BY RAND() LIMIT 27;
何か案は?