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

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

Ответ 1

SELECT * FROM table
ORDER BY NEWID()

Ответ 2

Это простейшее решение:

SELECT quote FROM quotes ORDER BY RAND() 

Хотя это не самый эффективный. Этот вариант является лучшим решением.

Ответ 3

Обычный метод - использовать функцию NEWID(), которая генерирует уникальный GUID. Таким образом,

SELECT * FROM dbo.Foo ORDER BY NEWID();

Ответ 4

(Несмотря на теги), сам вопрос неоднозначен, на котором используется сервер базы данных, поэтому вы можете получить здесь ответ на другой сервер. Для других серверов баз данных (MySQL, PostgreSQL, IBM DB2 и Oracle) взгляните на http://www.petefreitag.com/item/466.cfm

Ответ 5

Вот пример (источник):

SET @randomId = Cast(((@maxValue + 1) - @minValue) * Rand() + @minValue AS tinyint);

Ответ 6

Чтобы быть эффективным и случайным, было бы лучше иметь два разных запроса.

Что-то вроде...

SELECT table_id FROM table

Затем на выбранном вами языке выберите случайный идентификатор, затем потяните данные этой строки.

SELECT * FROM table WHERE table_id = $rand_id

Но это не очень хорошая идея, если вы ожидаете, что в таблице будет много строк. Было бы лучше, если бы вы поставили какой-то лимит на то, что вы случайно выбираете. Для публикаций, возможно, случайно выбирайте только те предметы, которые были отправлены в течение прошлого года.

Ответ 7

Это то, что вам нужно:

SELECT * FROM table_name ORDER BY RAND() LIMIT 1