私はデータベースのテーブルquestions
を2000+の行を持つオンラインWebサーバーに持っています。ランダムに選択された6つの行を取得する必要があります。それらは1つの質問が6つの質問のリストの配列の2倍でないように異なっていなければなりません。PHPのMySQLデータベースからランダムな行を選択するにはどうしたらいいですか?
どうすればこの問題を解決できますか?
私はデータベースのテーブルquestions
を2000+の行を持つオンラインWebサーバーに持っています。ランダムに選択された6つの行を取得する必要があります。それらは1つの質問が6つの質問のリストの配列の2倍でないように異なっていなければなりません。PHPのMySQLデータベースからランダムな行を選択するにはどうしたらいいですか?
どうすればこの問題を解決できますか?
を:
select q.*
from questions q
order by rand()
limit 6;
このクエリでは、order by
が最長の時間をとります。 2,000行の注文が目立つことがあります。単純な修正は、順序付けされる行の数を減らすことです。一つの方法は次のとおりです。
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.選択したものを注文します。
ありがとうございます! – Mapi
MySQLでDISTINCTオペレータ使用:あなたは比較的少量のデータを持っているので、最も簡単な方法がある
SELECT DISTINCT column FROM table ORDER BY RAND() LIMIT 6;
のでDISTINCT
世話をし、削除します重複
'select * from table order from rand()limit 6'? – RamRaider
RAND()LIMIT 10; ' – Karthi
であなたのクエリを使用してください。しかし、別の質問と一致する可能性があります。 –