LIMIT затем RAND, а не RAND затем LIMIT - PullRequest
3 голосов
/ 15 апреля 2010

Я использую полнотекстовый поиск, чтобы тянуть строки.
Я упорядочиваю строки на основе оценки (ORDER BY SCORE), затем из 20 верхних строк (LIMIT 20) хочу рандировать (RAND) набор результатов.

Так что для любого конкретного поискового запроса я хочу случайным образом показать 5 из 20 лучших результатов.

Мой обходной путь основан на коде - я помещаю 20 лучших в массив, затем случайным образом выбираю 5.

Есть ли способ sql сделать это?

1 Ответ

6 голосов
/ 15 апреля 2010

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

SELECT *
FROM (
    SELECT *
    FROM table1
    ORDER BY score DESC
    LIMIT 20
) AS T1
ORDER BY RAND()
LIMIT 5
...