Случайный ряд с группой по? - PullRequest
0 голосов
/ 08 марта 2020

Я пытаюсь отобразить случайную строку каждой группы с SQL и PHP. Группа - это «категория» в моей базе данных.

Я использую это:

SELECT * 
FROM images i, set s
WHERE i.ImageSetId = s.SetId
GROUP BY s.SetCategorie
ORDER BY rand()

С этим кодом у меня есть одна строка для каждой категории, но она всегда возвращает первую строку и я не понимаю, как отобразить случайную строку для каждой категории ie. Кто-нибудь может мне помочь, пожалуйста?

ps: я пробовал другие вещи с датой и GROUP BY rand ('e.SetCategor ie'), но это не работает вообще.

Заранее спасибо и извините, мой английский sh: p

1 Ответ

0 голосов
/ 08 марта 2020

Вам нужно фильтрация вместо агрегирования.

В MySQL 8.0 вы можете использовать оконные функции:

SELECT *
FROM (
    SELECT 
        i.*, 
        s.*,
        row_number() over(partition by s. SetCategorie Order by rand()) rn
    FROM images i
    INNER JOIN set s ON i.ImageSetId = s.SetId
) t
WHERE rn = 1

В более ранних версиях это значительно более сложный Вот хакерское решение с использованием частичного group by:

SELECT *
FROM (
    SELECT 
        i.*, 
        s.*
    FROM images i
    INNER JOIN set s ON i.ImageSetId = s.SetId
    ORDER BY RAND()
) t
GROUP BY SetCategorie
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...