ORDER BY RAND()

Задача: выбрать 5 случайных активных пользователей из таблицы user
Решение:
SELECT userid, user_name FROM user WHERE activity=1 ORDER BY RAND() LIMIT 5

ORDER BY RAND() - удобная конструкция для выборки случайных записей из таблицы. Она не очень быстрая, но удобная в случае выборки более одной случайной записи, и для небольших таблиц то, что доктор прописал. Для таблицы 20 000 записей вышеприведенный запрос занимает 0.02 с.

Вот такой интересный способ выбора случайной записи встречается иногда :-)

$res = mysql_query(‘SELECT userid, user_name FROM user WHERE activity=1’);
$j = rand(1,mysql_num_rows($res));
$i=1;
while($row=mysql_fetch_array($res)){
    if($i==$j){
        break;
    }
    $i++;
}
#1

Долго смеялся над последним вариантом :)

Артём Курапов, 19.07.2008 - 19:52
#2

Да, крутая штука. Мне надо выбрать 10 случайных записей и отсортировать их по другому полю. Код ORDER BY RAND(), `rating` DESC не срабатывает.

Holy Diver, 18.03.2009 - 09:28
#3

SELECT * FROM %tablename$% WHERE %PK_KEY% IN (SELECT %PK_KEY% FROM %tablename% ORDER BY RAND() LIMIT 10) ORDER BY %fieldname% DESC

Д., 27.05.2010 - 12:39
#4

Да да. order by rand() оооочень каварная штучка. На больших таблицах и выборке нескольких случайных записей подвисает не на шутку.

Способов реализации придумано много, и все они направлены на определение "случайных" не в SQL, а программных скриптах.

А приведённый пример - лишь одна из попыток какого-то студента снять с SQL эту задачу

mozgomix.ru, 13.01.2011 - 13:54
Оставить комментарий