Mysql заказ по RAND, но должен включать несколько данных - PullRequest
3 голосов
/ 25 апреля 2020

У меня возникла необычная проблема. Пожалуйста помоги. В столбце 300 строк. Я хочу отобразить любой порядок 100 по rand (). Но в этой случайно выбранной 100 должно быть 2 строки. Как я могу исправить это? Пример:

"Выбрать id из sample_table, где id <300 или id> 1 порядок по rand () limit 100"

Но я хочу, чтобы результат должен включать id = 34 и id = 78

Ответы [ 2 ]

4 голосов
/ 25 апреля 2020

Используйте UNION ALL, чтобы выбрать 2 строки, которые должны существовать в результатах, и 98 случайных строк:

select id from sample_table 
where id in (34, 78) 
union all
select id from (
  select id from sample_table 
  where where id not in (34, 78)
  order by rand() limit 98
) t
order by rand()

или проще с условной сортировкой:

select * from (
  select id from sample_table 
  order by id not in (34, 78), rand()
  limit 100
) t
order by rand()
0 голосов
/ 25 апреля 2020

Объединяет как исходный SELCT, так и случайный результат этого объединения

SELECT 
    id
FROM
    (SELECT 34 UNION SELECT 78 UNION SELECT 
        id
    FROM
        sample_table
    WHERE
        id < 300 OR id > 1
    ORDER BY RAND()
    LIMIT 98)
ORDER BY RAND()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...