как сформировать запрос для выбора 'm' строк случайным образом из результата запроса, который имеет 'n' rows.
для ex; 5 строк из результата запроса, который имеет 50 строк
Я пытаюсь сделать следующее, но ошибки
select * from (select * from emp where alphabet='A' order by sal desc) order by rand() limit 5;
u может задаться вопросом, почему он нуждается в суб-запросе, мне нужно 5 разных имен из набора из 50 лучших, полученных внутренним запросом.
SELECT * FROM t
ORDER BY RAND() LIMIT 5
или из вашего запроса:
SELECT * FROM ( SELECT * FROM t WHERE x=y ) tt
ORDER BY RAND() LIMIT 5
Это даст вам номер для использования как 'm' (limit)
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, в соответствии с используемым стеком технологий.
Теперь понятно? Если нет, добавьте больше информации на свой вопрос.