выберите одну строку в каждой группе doctrine - PullRequest
2 голосов
/ 14 апреля 2020

у меня есть таблица:

 id | user | date
 ---+----------+------
 1 | name1 | 01-02-2020
 2 | name3 | 02-04-2020
 3 | name2 | 01-02-2020
 4 | name3 | 04-05-2020
 5 | name2 | 04-02-2020

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

исключенный вывод:

id | name | date
 ---+----------+------
 1 | name1 | 01-02-2020
 5 | name2 | 04-02-2020
 4 | name3 | 04-05-2020

что я сделал до сих пор:

        ->select('f')
        ->from('table', 'f')
        ->from('User', 'u')
        ->where('u.id = f.user')
        ->orderBy('f.date', 'DESC')
        ->getQuery(); ```

1 Ответ

1 голос
/ 14 апреля 2020

Редактировать: я удаляю SetMaxResult

Использовать GroupBy, orderBy:

$qb = $this->createQueryBuilder('f')
->leftJoin('f.user', 'u')
->groupBy('u.name')
->orderBy('f.date', 'DESC');

Я не тестировал, но он должен работать.

...