在学说中我能做到:
public function getCount()
{
$q = $this->createQuery('q')
->select('*')
->addSelect('count(q.name) as count')
->groupBy('q.name')
->orderBy('count DESC');
return $q->execute();
}
我如何在Symfony 1.4中的Propel中做同样的事情?
答案 0 :(得分:9)
诅咒!它比那更容易!
如果需要计算给定查询的结果行,则需要使用count()
终止方法,基本上:
MyTableQuery::create()->count();
阅读以下文档部分以获取更多信息:http://www.propelorm.org/documentation/03-basic-crud.html#query_termination_methods
如果要在查询中添加count
或nb
额外列,表示COUNT
或SUM
等SQL聚合函数,则应使用{ {1}}方法:
withColumn()
答案 1 :(得分:2)
尝试:
public function getCount()
$c = new Criteria();
$c->addAsColumn('count', 'count(name)');
$c->addDescendingOrderByColumn($c->getColumnForAs('count'));
$c->addGroupByColumn('name');
return self::doCount($c);
}
这里有关于推进查询的一些好的信息片段 - > http://snippets.symfony-project.org/snippets/tagged/criteria/order_by/date
答案 2 :(得分:1)
喜欢这个:
$myRows = MyTableQuery::create()->
addAsColumn('count', 'COUNT(name)')->
addGroupByColumn('count')->
addDescendingOrderByColumn('count')->
find();
我不确定GROUP BY
- 您可能需要别名,或重新指定COUNT
子句。试一试,看看实验有什么用:)
你真的必须使用自动完成的IDE来利用Propel(以及Doctrine) - 你的查询将更容易构建。
我通常的答案通常是@ ManseUK,即基于Criteria类 - 但是当Propel 2出现时,这将被逐步淘汰,所以现在准备好你的代码可能是个好主意。