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

0

как сформировать запрос для выбора '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 лучших, полученных внутренним запросом.

Теги:
random
subquery

2 ответа

1
Лучший ответ
SELECT * FROM t
ORDER BY RAND() LIMIT 5

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

SELECT * FROM ( SELECT * FROM t WHERE x=y ) tt
ORDER BY RAND() LIMIT 5
  • 0
    Ошибка результата 2-го запроса: ОШИБКА 1248 (42000): каждая производная таблица должна иметь свой псевдоним
  • 1
    просто добавьте 'some_name' (без кавычек) после закрывающей скобки
Показать ещё 2 комментария
1

Это даст вам номер для использования как '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, в соответствии с используемым стеком технологий.
Теперь понятно? Если нет, добавьте больше информации на свой вопрос.

  • 0
    Извините, я не мог понять ваше решение. Можете ли вы сказать мне больше, пожалуйста,
  • 0
    Отредактировано, посмотрим, понятнее ли

Ещё вопросы

Сообщество Overcoder
Наверх
Меню