MySQL случайных строк - PullRequest
       6

MySQL случайных строк

0 голосов
/ 17 декабря 2009

как сформировать запрос для случайного выбора 'm' строк из результата запроса, который имеет 'n' строк .

для примера; 5 строк из результата запроса, который имеет 50 строк

Я стараюсь, как показано ниже, но это ошибки

 select * from (select * from emp where alphabet='A' order by sal desc) order by rand() limit 5;

Вы можете задаться вопросом, почему ему нужен подзапрос, мне нужно 5 разных имен из набора топ-50, полученных в результате внутреннего запроса.

Ответы [ 2 ]

1 голос
/ 17 декабря 2009

Это даст вам номер для использования в качестве «м» (предел)

TRUNCATE((RAND()*50),0);

... заменить 50 на n.
Чтобы проверить это, попробуйте следующее:

SELECT TRUNCATE((RAND()*50),0);

Я должен предупредить, что это может вернуть 0 в результате, это нормально для вас?

Например, вы можете сделать что-то вроде этого:

SELECT COUNT(*) FROM YOUR_TABLE

... и сохранить результат в переменной с именем totalRows , например. Тогда вы могли бы сделать:

SELECT * FROM YOUR_TABLE LIMIT TRUNCATE((RAND()*?),0);

где вы подставили '?' с переменной totalRows , в зависимости от используемого вами стека технологий.
Это теперь понятнее? Если нет, пожалуйста, добавьте больше информации к вашему вопросу.

1 голос
/ 17 декабря 2009
SELECT * FROM t
ORDER BY RAND() LIMIT 5

или из вашего запроса:

SELECT * FROM ( SELECT * FROM t WHERE x=y ) tt
ORDER BY RAND() LIMIT 5
...