Sql 在左联接表中使用按计数排序
我在按计数字段对查询结果排序时遇到问题。我的简化查询:Sql 在左联接表中使用按计数排序,sql,doctrine,doctrine-1.2,Sql,Doctrine,Doctrine 1.2,我在按计数字段对查询结果排序时遇到问题。我的简化查询: $customers = Doctrine_Core::getTable("Customer")->createQuery("c") ->leftJoin("c.Project p") ->orderBy("COUNT(p.id) ASC"); ->execute(); 我很确定这个问题与条令无关。从应用程序日志检索的ORM生成的查询只选择一行,其中包含一行: ORDER BY COUNT(
$customers = Doctrine_Core::getTable("Customer")->createQuery("c")
->leftJoin("c.Project p")
->orderBy("COUNT(p.id) ASC");
->execute();
我很确定这个问题与条令无关。从应用程序日志检索的ORM生成的查询只选择一行,其中包含一行:
ORDER BY COUNT( r2.id ) ASC
删除后,所有行都被正确选择
orderby
子句使查询仅从customers表中选择一行。我认为这与客户没有分配任何项目有关。我做错了什么?如果您试图根据客户的项目数量进行分组,请尝试使用group by子句并在客户的主键上进行聚合:
$customers = Doctrine_Core::getTable("Customer")->createQuery("c")
->select('c.*, count(p.id) as count')
->leftJoin("c.Project p")
->groupBy('c.id') // or the primary key of Customer
->orderBy("count ASC")
->execute();
您能否将ORM生成的查询的其余部分添加到问题中?按聚合值排序只能在分组查询上进行-如果要按p.id排序(而不是按p.id计数),则应将查询更改为
order by r2.id ASC
。否,我希望它按相关行数排序。“否”是否意味着您无法将ORM生成的查询的其余部分添加到问题中?不,不,是关于按ID排序的。我稍后会附加查询的其余部分,因为我现在没有访问该应用程序的权限。另外,这是MySQL吗?(我怀疑这种形式的查询在大多数其他RDBMS中都会失败。)