Велико лишь то, что долговечно; долговечно лишь то, что справедливо (Д. Феррари).

Выбор случайных записей в MySQL

3 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
22 января 2020
Как скопировать базу данных MySQL
Резюме : в этом руководстве вы изучите различные методы выбора случайных записей из таблицы базы данных в MySQL.

Иногда вам нужно выбрать случайные записи из таблицы, например:

  • Выделите несколько случайных постов в блоге и отобразите их на боковой панели.
  • Выбор случайной цитаты для отображения виджета «Цитата дня».
  • Выбор случайных картинок в галерее и использование в качестве рекомендуемых картинок.

 

MySQL выбирает случайные записи, используя ORDER BY RAND()

MySQL не имеет встроенного оператора для выбора случайных строк из таблицы. Для этого вы используете функцию RAND().

Следующий запрос выбирает случайную строку из таблицы базы данных:

SELECT * FROM table_name
ORDER BY RAND()
LIMIT 1;

 

Давайте рассмотрим запрос более подробно.

  • Функция RAND() генерирует случайное значение для каждой строки в таблице.
  • Предложение ORDER BY сортирует все строки в таблице по случайному числу, сгенерированному функцией RAND().
  • Предложение LIMIT выбирает первую строку в наборе результатов, отсортированных случайным образом.

Если вы хотите выбрать N случайных записей из таблицы базы данных, вам нужно изменить предложение LIMIT следующим образом:

SELECT * FROM table_name
ORDER BY RAND()
LIMIT N;

 

Смотрите следующую customersтаблицу из примера базы данных.

Выбор случайных записей в MySQL

 

В следующем примере выбираются пять случайных клиентов из таблицы customers:

SELECT
customerNumber,
customerName
FROM
customers
ORDER BY RAND()
LIMIT 5;

 

Обратите внимание, что вы можете получить другой набор результатов, потому что он случайный.

Эта техника очень хорошо работает с небольшим столом. Тем не менее, это будет медленно для большой таблицы, потому что MySQL должен отсортировать всю таблицу, чтобы выбрать случайные.

Скорость запроса также зависит от количества строк в таблице. Чем больше строк в таблице, тем больше времени требуется для генерации случайного числа для каждой строки.

 

MySQL выбирает случайные записи, используя предложение INNER JOIN

Этот метод требует, чтобы таблица имела поле первичного ключа с автоинкрементом и в последовательности не было пробела.

Следующий запрос генерирует случайное число на основе столбца первичного ключа:

SELECT
ROUND(RAND() * ( SELECT MAX(id) FROM  table_name)) AS id;

 

Мы можем объединить таблицу с набором результатов, возвращенным вышеуказанным запросом, следующим образом:

SELECT t.*
FROM table_name AS t
INNER JOIN
(SELECT ROUND(
RAND()*
(SELECT MAX(id) FROM table_NAME )) AS id
) AS x
WHERE
t.id >= x.id
LIMIT 1;

 

Используя эту технику, вы должны выполнить запрос несколько раз, чтобы получить более одной случайной строки, потому что, если вы увеличите лимит, запрос выдаст только последовательные строки, которые начинаются со случайно выбранной строки.

Следующий запрос возвращает случайного клиента из таблицы customers.

SELECT
t.customerNumber, t.customerName
FROM
customers AS t
JOIN
(SELECT
ROUND(RAND() * (SELECT
MAX(customerNumber)
FROM
customers)) AS customerNumber
) AS x
WHERE
t.customerNumber >= x.customerNumber
LIMIT 1;

 

MySQL выбирает случайные записи, используя переменные

В случае, если в таблице есть столбец id со значениями, которые попадают в диапазон, 1..N и в диапазоне нет пропуска, вы можете использовать следующую технику:

  • Сначала выберите случайные числа в диапазоне 1..N.
  • Во-вторых, выберите записи на основе случайных чисел.

Следующее утверждение поможет вам сделать это:

SELECT
table. *
FROM
(SELECT
ROUND(RAND() * (SELECT
MAX(id)
FROM
table)) random_num,
@num:=@num + 1
FROM
(SELECT @num:=0) AS a, table
LIMIT N) AS b,
table AS t
WHERE
b.random_num = t.id;

 

Обратите внимание, что пользовательские переменные зависят от соединения. Это означает, что эту технику нельзя использовать с пулом соединений. Кроме того, первичный ключ должен быть целочисленным, а его значения должны быть в последовательности без пробелов.

В этом уроке мы показали вам несколько приемов выбора случайных записей из таблицы.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close