Использование порядка по количеству в таблицах слева - PullRequest
0 голосов
/ 12 марта 2012

У меня проблема с сортировкой результатов моего запроса по полю подсчета.Мой упрощенный запрос:

$customers = Doctrine_Core::getTable("Customer")->createQuery("c")
    ->leftJoin("c.Project p")
    ->orderBy("COUNT(p.id) ASC");
    ->execute();

Я почти уверен, что проблема не связана с доктриной.Сгенерированный ORM запрос, извлеченный из журналов приложения, выбирает только одну строку и содержит строку:

ORDER BY COUNT( r2.id ) ASC

После удаления все строки которых выбраны правильно

Предложение ORDER BY заставляет запрос выбрать только одну строку из таблицы клиентов.Я думаю, что это связано с тем, что клиенты не имеют назначенных им проектов.Что я делаю не так?

1 Ответ

0 голосов
/ 30 марта 2012

Если вы пытаетесь сгруппировать по количеству проектов для Клиента, попробуйте использовать предложение GROUP BY и агрегировать по первичному ключу Клиента:

$customers = Doctrine_Core::getTable("Customer")->createQuery("c")
->select('c.*, count(p.id) as count')
->leftJoin("c.Project p")
->groupBy('c.id') // or the primary key of Customer
->orderBy("count ASC")
->execute();
...