我在查詢中從50k行的數據庫中選擇100個隨機行時遇到了問題。RAND的多行替代方法()
首先,我只使用了函數RAND(),但它變得太慢了。
我現在用的這個查詢:
$query = mysql_query("SELECT t1.* FROM users AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM users WHERE picture != '' && age <= 50 && age >= 18 && username != '')) AS id) AS t2 WHERE picture != '' && age <= 50 && age >= 18 && username != '' && t1.id >= t2.id LIMIT 100");
while($q = mysql_fetch_assoc($query))
{ echo $q['id'].'<br>'; }
但有時它給了一堆空行。
有人可以告訴我最新出錯嗎?
謝謝!
UPDATE我正在嘗試此查詢,但它給了我一個錯誤。
$query = mysql_query("SELECT id FLOOR(1 + RAND() * x.m_id) 'rand_ind' FROM users (SELECT MAX(t.id) - 1 'm_id' FROM users t) x WHERE picture != '' && age <= 50 && age >= 18 && username != '' ORDER BY rand_ind LIMIT 100");
mysql_fetch_assoc():提供的參數不是一個有效的MySQL結果資源
以任意順序獲取所有行,然後使用PHP進行混洗(或從結果數組中取幾個隨機數)可能是正確的方法。 –
@MadaraUchiha,當我們實際只需要100個時選擇50k行不是一個好主意 –
@ v2p:沒有好好讀,我的壞,你說得對。 –