メッセージ リスト内の最新の 30 メッセージをクエリする必要があります。そうすると、これらの 30 メッセージがランダムに表示されます。
ランダム表示とは何ですか?
ランダム表示とは何ですか?
最初に付け加えておきますが、この 5 つの情報はフロントに表示されます。メッセージフォームの最新30件の中からランダムに5件を取得して表示します。
SQL ステートメントを使用してこれを実現することはできないようです。
テーブルが比較的大きい場合は、SQL ステートメントを使用しても要件を満たすことができます。
テーブルが比較的大きい場合は、少し遅くなる可能性があります。遅いです
例を挙げてもらえますか?
まず30個のデータを読み出し、phpを使ってランダムに表示します。
一時テーブルを作成し、最新の 30 項目を保存し、 select * form a order by rand() を使用します。 () 制限 5
毎回このように実行すると非常に遅くなりませんか?
そこで、PHP で 5 つの項目をランダムに選択するプログラムを書くか、最新の 30 項目を配置する特別なテーブルを作成する方が良いでしょう。
order rand() で使用しないのが最善です
select * from xxxx order by timefield desc limit 30
結果を取り出して配列に入れ、シャッフルすることができます
だから私はPHP で 5 つの項目をランダムに選択するプログラムを作成するか、特別なテーブルを作成して最新の 30 エントリを入れるか
SQL を使用して実行できるかどうか疑問に思っています。私が読み取ったレコードセットはクラスからのものであるためです。
うーん) as t order by rand() limit 5
select * from (SELECT * FROM xxx order by xxx desc limit 30) t order by rand() によると、最初に取得されたデータはクラス Collection のものであるため、 SQL に変換して結合し、実行して配列を返します。
SQL で実行できますが、実際には効率的ではありません
SQL コード?1select * from (SELECT * FROM xxx order by xxx desc limit 30 ) t order by rand()
問題は大きくないと思います、テーブル全体が rand で注文されるわけではありません
13 階の ustb からの返信を引用: SQL はそれを実行できますが、実際には効率的ではありません
SQL コード?1select * from (SELECT * FROM xxx order by xxx desc limit 30 ) t order by rand()
ネストされたクエリを減らしますか? 。 。
問題は大きくないと思います、rand によるテーブル全体の順序ではありません
13 階の ustb からの返信を引用: SQL は実行できますが、実際には効率的ではありません
SQL コード?1select * from ( SELECT * FROM xxx order by xxx desc limit 30 ) t order by rand()
同意します!
10 項目のみを表示する場合は、30 項目の中からランダムに表示されます。ランダム効果が更新されました。
追加するだけです、それだけです、そうです
SQL コード?1select * from (SELECT * FROM xxx order by xxx desc limit 30) t order by rand()