считать с учением - PullRequest
       13

считать с учением

2 голосов
/ 05 сентября 2011

у меня две таблицы:

Name
    id | name | city_id
    1  | aaa  | 1
    2  | vvv  | 2
    3  | ddd  | 2
    4  | sss  | 3
    5  | dds  | 1

и т.д.

City:
id | name
1  | London
2  | NY
3  | Boston

и т.д.

как я могу получить Город и считать:

name_city | count
London    | 2
NY        | 2
Boston    | 1

В таблице City:

$q = $this->createQuery('a')
           ->leftJoin('a.Name n')
           ->select('a.name_city as name_city, sum(n.city_id) as sum');

        return $q->execute();

но это неправильно.

Ответы [ 3 ]

3 голосов
/ 05 сентября 2011

Вы должны использовать count() вместо sum(), и плюс вам нужно group by.

1 голос
/ 24 октября 2011

эта публикация была довольно полезной, но я хотел бы добавить немного больше информации для тех, кто хочет объединить 2 таблицы с общим количеством.

например, этот пост (http://stackoverflow.com/questions/7837671/mysql-join-tables-and-count-instances), но в доктрине.

При использовании приведенного выше примера запрос будет (доктрина 2.0):

$q = $this->em->createQueryBuilder('a')
           ->select('a.name_city as name_city, count(n.city_id) as sum');
           ->from('city','a')
           ->leftJoin('a.Name n')
           ->groupBy('n.id')
           ->orderBy('sum')

    $query = $qb->getQuery();
    echo $qb->getDql();  // if you want to see the dql created
    $result = $query->getResult();
1 голос
/ 05 сентября 2011

У вас нет предложения FROM, тип объекта не указан для объекта a.

Также прочтите раздел агрегированных значений в документации .

...