ホームページ  >  記事  >  バックエンド開発  >  SQL文の書き方を探しています

SQL文の書き方を探しています

WBOY
WBOYオリジナル
2016-06-23 14:03:55853ブラウズ

メッセージ リスト内の最新の 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 を使用して実行できるかどうか疑問に思っています。私が読み取ったレコードセットはクラスからのものであるためです。

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()
同意します!

30 項目すべてをランダムに表示しても、特別な効果はなく、テキストは最終的に同じままになります。


10 項目のみを表示する場合は、30 項目の中からランダムに表示されます。ランダム効果が更新されました。

追加するだけです、それだけです、そうです

SQL で実行できますが、実際には効率的ではありません

SQL コード?1select * from (SELECT * FROM xxx order by xxx desc limit 30) t order by rand()

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。