Mysql: «порядок по Rand () лимит 4» или нет? - PullRequest
1 голос
/ 05 октября 2011

Мне нужно извлечь случайные 4 элемента из базы данных последних новостей.

, так как в этой таблице много строк.Разумно ли это делать с помощью RAND () или тратить ресурсы? Так как он пройдет всю таблицу и переупорядочит ее?

Есть ли лучший способ сделать это?извлечь случайные избранные элементы из таблицы с сотнями строк?

Пример:

$l=$database->query("SELECT car,price,thumbnail FROM cardb WHERE type='new' order by RAND() LIMIT 4");
foreach($l as $l){print_r($l);}

Спасибо, что нашли время ответить}

1 Ответ

0 голосов
/ 06 октября 2011

Ну ... я бы сделал это в двух запросах.Получить случайные номера строк:

SELECT
    floor(count * rand()) r1,
    floor(count * rand()) r2,
    floor(count * rand()) r3,
    floor(count * rand()) r4
FROM
    (SELECT count(*) count FROM cardb WHERE type = 'new') c

И получить строки:

SELECT car, price, thumbnail FROM cardb WHERE type = 'new' LIMIT {r1}, 1
UNION ALL
SELECT car, price, thumbnail FROM cardb WHERE type = 'new' LIMIT {r2}, 1
UNION ALL
SELECT car, price, thumbnail FROM cardb WHERE type = 'new' LIMIT {r3}, 1
UNION ALL
SELECT car, price, thumbnail FROM cardb WHERE type = 'new' LIMIT {r4}, 1
...