2009-12-05 62 views
1

我有以下的MySQL。我想拉以隨機順序的數據。如何訂購數據隨機

能anyonet教我怎麼做吧。

$Q = $this->db->query('SELECT P.*, C.Name AS CatName 
       FROM products AS P 
       LEFT JOIN categories C 
       ON C.id = P.category_id 
       WHERE C.Name = "Front bottom" 
       AND p.status = "active" 
       '); 

回答

3
$Q = $this->db->query('SELECT P.*, C.Name AS CatName 
        FROM products AS P 
        LEFT JOIN categories C 
        ON C.id = P.category_id 
        WHERE C.Name = "Front bottom" 
        AND p.status = "active" 
        ORDER BY RAND() 
        '); 

你可以使用MySQL的RAND功能來做到這一點,要注意的是,將在龐大的數據集(〜10K左右)表現非常緩慢。 MySQL的皮卡會爲表可能導致問題,如果表是巨大的每一行的隨機數。

一個更安全的方法是做一個SELECT count(*) as n FROM table並拾取一個隨機數並用LIMIT 1,n進行查詢以獲取第n行。如果你只需要1,將工作,或者你不在乎具有結果相同的順序。

之後如果你真的需要一個完整的隨機集合,在我看來,更好的做在服務器端。

0

您可以嘗試

ORDER BY RAND() 
0

最簡單的方法是使用ORDER BY RAND(),但它的性能更是苦不堪言,特別是對於較大的數據集(要求所有匹配的行隨機數)。

另一種方式是隨機(再次無論是在你的代碼或使用RAND():WHERE id in (RAND(), RAND(), RAND(), RAND())應該工作,但沒有保證)創建一個ID。這隻要某些ID不存在獲取問題。

這裏是一個interesting article on the topic