2009-12-05 5 views
1

У меня есть следующая MySQL. Я хочу вывести данные в произвольном порядке.Как сделать заказ данные случайным образом

Может ли кто-нибудь научить меня, как это сделать, пожалуйста.

$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() 
        '); 

вы можете использовать RAND функцию MySQL, чтобы сделать это, следует отметить, что она будет выполнять очень медленно на огромном наборе данных (~ около 10к). 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()) должен работать, но без гарантии). Это становится проблематичным, как только некоторые идентификаторы не существуют.

Адрес interesting article on the topic.

Смежные вопросы