questions
オンラインWebサーバーに2000行以上のデータベーステーブルがあり、ランダムに選択された6つの行を取得する必要があります。1つの質問が6つの質問のリスト配列で2回にならないように、それらは異なっている必要があります。
どうすればこれを達成できますか?
データ量が比較的少ないため、最も簡単な方法は次のとおりです。
select q.*
from questions q
order by rand()
limit 6;
このクエリでは、order by
が最も長い時間を要します。2,000行の注文が目立つ場合があります。簡単な修正は、注文される行の数を減らすことです。1つの方法は次のとおりです。
select q.*
from questions q cross join
(select count(*) as cnt from questions) m
where rand() < 100 / m.cnt
order by rand()
limit 6;
はwhere
約100行をランダムに選択し、次にwhere
6行を選択するように順序付けます。は常に少なくとも6行を選択することがほぼ保証されています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加