Вернуть строки в случайном порядке

Можно ли написать SQL-запрос, который возвращает строки таблицы в случайном порядке при каждом запуске запроса?

6 ответов

Решение
SELECT * FROM table
ORDER BY NEWID()

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

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);
Другие вопросы по тегам