Вернуть строки в случайном порядке
Можно ли написать SQL-запрос, который возвращает строки таблицы в случайном порядке при каждом запуске запроса?
6 ответов
Это самое простое решение:
SELECT quote FROM quotes ORDER BY RAND()
Хотя это не самый эффективный. Это лучшее решение.
Обычный метод заключается в использовании функции NEWID(), которая генерирует уникальный GUID. Так,
SELECT * FROM dbo.Foo ORDER BY NEWID();
Это то, что вам нужно:
SELECT * FROM table_name ORDER BY RAND () LIMIT 1
Чтобы быть эффективным и случайным, лучше всего иметь два разных запроса.
Что-то вроде...
SELECT table_id ИЗ таблицы
Затем на выбранном вами языке выберите случайный идентификатор, затем извлеките данные этой строки.
SELECT * FROM table WHERE table_id = $ rand_id
Но это не очень хорошая идея, если вы ожидаете, что в таблице будет много строк. Было бы лучше, если бы вы установили какое-то ограничение на то, что вы выбираете случайным образом. Для публикаций, может быть, случайным образом выбирать только элементы, опубликованные в течение последнего года.
Вот пример ( источник):
SET @randomId = Cast(((@maxValue + 1) - @minValue) * Rand() + @minValue AS tinyint);