2016-10-22 13 views
3

私はデータベースのテーブルquestionsを2000+の行を持つオンラインWebサーバーに持っています。ランダムに選択された6つの行を取得する必要があります。それらは1つの質問が6つの質問のリストの配列の2倍でないように異なっていなければなりません。PHPのMySQLデータベースからランダムな行を選択するにはどうしたらいいですか?

どうすればこの問題を解決できますか?

+1

'select * from table order from rand()limit 6'? – RamRaider

+0

RAND()LIMIT 10; ' – Karthi

+0

であなたのクエリを使用してください。しかし、別の質問と一致する可能性があります。 –

答えて

7

を:

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.選択したものを注文します。

+0

ありがとうございます! – Mapi

3

MySQLでDISTINCTオペレータ使用:あなたは比較的少量のデータを持っているので、最も簡単な方法がある

SELECT DISTINCT column FROM table ORDER BY RAND() LIMIT 6; 

のでDISTINCT世話をし、削除します重複

関連する問題