MySQLデータベースのテーブルからランダムに置き換えることなく、いくつかのIDを1つずつ描画するPHPコードが必要です。
今、私はそれを次のように実装します:
ボックスと呼ばれるテーブルがあります
CREATE TABLE box
(
id INT UNSIGNED AUTO_INCREMENT,
PRIMARY KEY (id)
);
15個のレコードが含まれているとしましょう。
箱
id:
=====
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
=====
描画されたIDは記録され、次の描画で除外されます。
例えば、
最初は、描画用のSQLは次のようになります。
SELECT id FROM box RAND() LIMIT 1;`.
結果が4だとします。
次に、4を描画しました。描画用の次のSQLは、
SELECT id FROM box WHERE id != 4 ORDER BY RAND() LIMIT 1;
今回は結果が6だとしましょう。
つまり、4と6を描画したので、描画用の次のSQLは次のようになります。
SELECT id FROM box WHERE id != 4 AND id != 6 ORDER BY RAND() LIMIT 1;"
問題はそれです:
テーブル「ボックス」に2000レコードが含まれていて、1000以上のIDを描画した場合、描画用の次のSQLは非常に長くなります。SQLステートメントが長くなると、MySQLのプログラムまたはプロセスの実行が遅くなるのではないでしょうか。はいの場合、この問題を解決するための解決策/設計/アルゴリズムはありますか?テーブル内のレコードが増える可能性があるため、描画前にIDでランダムなシーケンスを作成することはできません。
問題の詳細:
PHPコードは複数のユーザーによって呼び出されるため、各ユーザーは自分によって描画されたいくつかの異なるIDを持っています。
実際、私の現在の設計では、ユーザーによって描画されたIDはPHPセッション変数に格納されています。ユーザーが描画したい場合、セッション変数に格納されているIDは、上記のように描画SQLのためにアクセスされます。