2011-09-05 54 views
2

我有两个表:计数教义

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 

在城市表:

$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

您应该使用count()而不是sum(),此外,您还需要一个group by

1

这篇文章是有点帮助,但我虽然我会为任何想加入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();