php - 带有别名的 SUM() 字段上的 Doctrine orderBy

标签 php doctrine-orm doctrine doctrine-query

我正在尝试做一个简单的 Doctrine 查询,但很费力。

$query->select(array(
    'app_title' => 'u.title',
    'user_name' => 'u.user_name',
    'first_used' => 'MIN(u.creation_time)',
    'last_used' => 'MAX(u.stop_time)',
    'total_usage' => 'SUM(u.stream_seconds)',
))
->from(self::USAGE_TABLE, 'u')
->orderBy('total_usage', 'DESC');

很明显,我得到一个关于列名未知的错误,因为 Doctrine 使用它自己的别名 (sclr4)。

但是,如果我尝试按实际值排序; SUM(u.stream_seconds),然后我在 order by 子句中得到一个意外的括号,我很确定 SQL 不支持这个。

因此,我只是尝试将数据放入表中并处理列的排序。这看起来很简单,我该怎么做呢?有什么想法吗?

最佳答案

  1. 您可以通过使用 AS 为结果添加别名将其列在查询投影中,从而对 SUM 结果字段进行排序。
  2. 如果你想使用聚合函数,如MIN()MAX()AVG(),你必须使用分组依据

尝试与此类似,这对我来说非常有效(顺便说一句,而不是 select 方法中的关联数组):

$q = $this->em()->createQueryBuilder();

$q->select(['product.id', 'product.title'])
  ->addSelect('SUM(product.price) AS HIDDEN stat_sum_realised')
  ->from('ModuleAdmin\Entity\ProductEntity', 'product')
  ->groupBy('product.id');

$q->orderBy('stat_sum_realised', 'DESC');

此处详细介绍了聚合函数(例如 MySQL): http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

从 Doctrine ORM 2.3 开始,您还可以使用 HIDDEN 关键字,这将避免(在这种情况下)stat_sum_realised 被水化到您的结果集中。

关于php - 带有别名的 SUM() 字段上的 Doctrine orderBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15574991/

相关文章:

php - 将其存储为对象

php - 清除存储在 Redis 中的 Doctrine 缓存

php - 学说多对多关联 prePersist 数据复制

php - mySQL - 如何根据指定列是否包含指定值来列出行?

php - Doctrine - 或者在哪里?

php - 如何使 Doctrine PostgreSQL 外键约束 DEFERRABLE

symfony - 使用 Doctrine 设置数据库连接超时

php - 守护程序中的 Doctrine2 连接超时

php - 根据用户的 IP 将纬度和经度填充到数据库中

php - Doctrine Raw SQL 不调用自定义函数