Попадается задача вывода случайного элемента или нескольких элементов из таблицы 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 сек.
Простое не всегда быстрое.
Огромное спасибо автору, знаю что вопрос легкий, но уже вторые сутки ищу ответ
…и вот случайно наткнулся на этот блог…
рэспект автору !