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
 
английский язык для начинающих
Ашманов Египет Москва РХТУ Россия США Снежинск Таиланд Тушино Урал Челябинская область Яндекс алкоголь английский язык баги база данных безопасность бизнес блоги взлом видео выставка выходные горные лыжи дайвинг дауншифтинг допинг идиотизм инвентарь интернет книги кэширование мозг море музей ноутбук образование оптимизация отдых отпуск пароль плагин пора сваливать программирование программисты путешествия работа работоспособность радиация реклама самогоноварение собеседование социальные сети спам стартап статистика страны тайм-менеджмент техника учеба фантастика фото фриланс хакер экология электронные деньги юмор Ajax CMS DbSimple DDOS email FireFox Google honda htaccess HTML javascript jQuery life md5 MySQL PHP SEO soft SQL vkontakte Web web 2.0 wordpress