MySQL случайный элемент

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

Самое простое решения:

SELECT * FROM table ORDER BY rand()

Используется специальная функция MySQL которая генерирует случайное число — RAND()

Результатом выполнения этого запроса к MySQL будет вывод всех записей таблицы в случайном порядке.
Как ограничить количество выводимых случайных записей?
Используем оператор LIMIT.

SELECT * FROM table ORDER BY rand() LIMIT 1

При больших объемах таблицы (более 10 000 записей) этот запрос становится медленным и советуют применять другой более сложный но быстрый запрос:

SELECT name FROM my_table JOIN ( SELECT CEIL(RAND() * ( SELECT MAX(id) FROM my_table )) AS randomID ) AS random_table ON random_table.randomID=my_table.ID

При сравнении первого и второго варианта на выборке из 50 000 рядов получены следующие данные:

1 вариант — примерно 1,5 сек.

2 вариант -римерно 0,001 сек.

Простое не всегда быстрое.

  • phpQuery шпоргалка
  • Парсинг контента. Нет ничего проще (phpquery)
  • Аналог MySQL оператора LIMIT в MS SQL
  • размер базы данных MySQL через php
  • Замена подстроки в MySQL столбца
  • О себе
  • MySQL обратный слеш спецсимволы
  • Выгрузить загрузить SQL Dump
  • Перенос wordpress на новый домен со сменой префикса таблиц.
  • MySQL INSERT или UPDATE
  • Scaffolding CodeIgniter
  • хостинг php mysql — timeweb.ru — больше чем хостинг
  • 1 комментарий на “MySQL случайный элемент”

    1. Огромное спасибо автору, знаю что вопрос легкий, но уже вторые сутки ищу ответ :) …и вот случайно наткнулся на этот блог…

      рэспект автору !

    Оставить комментарий