Курилка.co.ua
Orphus RSS kurilka.co.ua

Category

Archives

Выборка из БД записей случайным образом

Author wmas wmas | Category Category MySQL

Здравствуйте, уважаемые читатели блога Курилка.co.ua. Столкнулся с такой проблемой: надо из базы данных выбрать 3ри записи — случайным образом, то есть random. Конечно, вариантов много, но хочется чего-то простого и оптимального. Хорошо, что руки есть так что поискал в Интернете нашел до безобразие простое решение. Всё работает в рамках одного SQL запроса, где идёт сортировка по random функциям.

Вот несколько примеров для разных видом баз данных.

MySQL: SELECT column FROM table ORDER BY RAND() LIMIT 3

PostgreSQL: SELECT column FROM table ORDER BY RANDOM() LIMIT 3

Microsoft SQL Server: SELECT TOP 3 column FROM table ORDER BY NEWID()

IBM DB2: SELECT column FROM table ORDER BY RAND() FETCH FIRST 3 ROWS ONLY

Oracle: SELECT column FROM ( SELECT column FROM table ORDER BY dbms_random.value ) WHERE rownum = 3

Авось кто-то тоже парится, и как обычно жду комментариев! Возможно, есть более элегантные способы, да и ошибки не исключены (кто его знает, со всеми нюансами хрен разберешься).

P.S. да, да это не экономично и накладно, но это работает. Как вариант вот человек предлагает такую мутотень, но я там ничего не понял.

Publish: Воскресенье Дек 17, 2006

11 Responses for "Выборка из БД записей случайным образом"

feed for comments on this post

  • Комментарий #102 author: Андрей Reply
    publish: Понедельник Дек 10, 2007 at 1:01 дп

    Классное решение!!!!
    Спасибо очень помогло.

  • Комментарий #103 author: Eugene Reply
    publish: Среда Дек 19, 2007 at 4:58 пп

    Спасибо, первая же ссылка, которая мне помогла.

  • Комментарий #1953 author: Vect0r Reply (subscribed to comments)
    publish: Четверг Окт 23, 2008 at 1:26 пп

    Даже не подозревал о существовании, если честно, и полагал, что такого не существует. Круто, спасибо.

  • Комментарий #2022 author: janson Reply
    publish: Пятница Ноя 21, 2008 at 11:37 дп

    Спасибо! Как раз понадобилась случайная выборка.

    Решал по другому — вытаскивал все записи, попадающие под запрос, складывал их в массив, и юзал shuffle(), после чего брал нужное количество записей с начала массива. :)
    Естесственно, при большом количестве записей в БД — метод непригодный.

  • Комментарий #2246 author: Рамиль Reply
    publish: Суббота Апр 11, 2009 at 9:54 пп

    благодарю, а я уж функцию на пхп писать собирался
    гы) :mrgreen:

  • Комментарий #2249 author: wmas Reply
    publish: Понедельник Апр 13, 2009 at 10:08 пп

    2Рамиль: hi! рад, что заметка была полезной ;-)

  • Комментарий #2302 author: Timatej Reply
    publish: Пятница Май 29, 2009 at 4:05 пп

    Такой запрос подходит только если база данных небольшая. Сколько раз видел чтоб изза этого запроса банили на хостинге скрипт. например выполнение такого запроса уже на 500 000 займёт больше 10 секунд. У кого таких ситуаций не предвидиться — наслаждайтесь.

  • Комментарий #2303 author: wmas Reply
    publish: Пятница Май 29, 2009 at 8:30 пп

    2Timatej: hi! Согласен. Впрочем, при большом количестве данных и необходимости подобного запроса обычно думают о распределенных БД и отдельном серваке(ах), иначе никак :roll: А так пока зватает ;-)

  • Комментарий #2321 author: Alexander Reply
    publish: Четверг Июн 18, 2009 at 4:29 пп

    Спс. Пригодилось. )))
    Кстати.
    Oracle: SELECT column FROM ( SELECT column FROM table ORDER BY dbms_random.value ) WHERE rownum <= 3

  • Комментарий #2753 author: Антон Reply
    publish: Среда Окт 27, 2010 at 10:22 пп

    Нельзя такое людям показывать! Это же жесть, к каждой строке в базе будет random генерироваться и только потом всё упорядочиваться. Безумно долго!

  • Комментарий #2792 author: Alexey Reply
    publish: Среда Фев 2, 2011 at 5:49 пп

    Годится только для небольших таблиц. До 1000 записей.


Popular links

Copyright © since 2006 Курилка.co.ua,
powered by WordPress