用Propel计算和分组

时间:2012-03-06 13:31:33

标签: php symfony1 propel

在学说中我能做到:

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中做同样的事情?

3 个答案:

答案 0 :(得分:9)

诅咒!它比那更容易!

如果需要计算给定查询的结果行,则需要使用count()终止方法,基本上:

MyTableQuery::create()->count();

阅读以下文档部分以获取更多信息:http://www.propelorm.org/documentation/03-basic-crud.html#query_termination_methods

如果要在查询中添加countnb额外列,表示COUNTSUM等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出现时,这将被逐步淘汰,所以现在准备好你的代码可能是个好主意。