Mysql выберите случайные строки с несколькими условиями где - PullRequest
2 голосов
/ 31 марта 2020

Это пример моей таблицы:

id     options     playlist_id
1      ...         7
3      ...         7
4      ...         9
11     ...         9
12     ...         7
14     ...         9

Как выбрать (например) 3 случайных строки для каждого playlist_id и сгруппировать результаты по playlist_id?

select id, options
from table
where playlist_id = 7 AND playlist_id = 9
group by playlist_id 
ORDER BY RAND()
LIMIT 3

Я ожидаю вернуть 3 случайные строки с playlist_id = 7 и 3 случайные строки с playlist_id = 9

1 Ответ

2 голосов
/ 31 марта 2020

Вам нужно 3 случайных песни за плейлист . Одни только order by и limit не могут этого сделать, поскольку они действуют на весь набор результатов, в то время как вам необходимо каким-то образом перемешивать и ограничивать в каждой группе.

Предполагая MySQL 8.0, вы можете использовать row_number() с предложением order by rand(); это назначает случайный ранг каждой записи в группах записей, имеющих один и тот же список воспроизведения, который затем можно использовать для фильтрации:

select id, options
from (
    select 
        t.*, 
        row_number() over(partition by playlis_id order by rand()) rn
    from mytable t
    where playlist_id in (7, 9)
) t
where rn <= 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...