在Propel中将Count添加到SQL查询中

时间:2012-07-17 15:05:31

标签: php symfony1 propel

我的项目旧版本(1.2)Propel。我想查询:

SELECT city_id, COUNT(*) FROM House GROUP BY city_id

我试过了:

  $c = new Criteria;
  $c->addAsColumn('count', 'Count(' . HousePeer::CITY_ID . ')'); 
  $this->results = HousePeer::doSelect($c);  

但这不起作用 - 只返回数据库中的第一条记录,没有计数等。

我也试过了:

$con = Propel::getConnection();
$sql = "SELECT city_id, COUNT(*) FROM House GROUP BY city_id";
$stmt = $con->createStatement();
$rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_NUM);
$this->results = HousePeer::populateObjects($rs);

但这让我感动

Error populating House object [wrapped: Invalid resultset column: 3]

我希望只收到与SQL表中相同的内容:

city_id | count
1       | 2
2       | 4
3       | 3

或从CityPeer获取城市名称(我和城市和众议院之间的关系正确) 例如:

city       | count
New York   | 2
Paris      | 4
Washington | 3

但我无法在Propel中使用此查询。

1 个答案:

答案 0 :(得分:1)

您在symfony的旧代码段中有a great example

尝试:

$c = new Criteria;
$c->clearSelectColumns()->addSelectColumn(HousePeer::CITY_ID);
$c->addGroupByColumn(HousePeer::CITY_ID);
$c->addAsColumn('numCity', 'COUNT('.HousePeer::CITY_ID.')');
$c->addJoin(HousePeer::CITY_ID, CityPeer::ID);

$rs = HousePeer::doSelectRS($c);

while ($rs->next())
{
  // etc ...
}