我因为一个大范围的查询而烦恼。
她将使用几张桌子:
此查询的目的是能够返回一个包含以下内容的列表:
不同的现有软件包,其下载次数,在一定时期内,按照下载次数的给定顺序(ASC或DESC)进行,所有这些都取决于其ID表已通过的用户类型参数。
所以,我:
Paquet:
键入Utilisateur:
用户:
TypeUtilisateur和Paquet之间的manyToMany关系:
和PackageDDLExternal:
所以我已经尝试创建此查询,但是一方面(在添加订单的级别上)似乎存在合成错误,而其他东西似乎会阻止...
public function getPackagesDDLBetween($debut, $fin,$typesUser,$ordre)
{
$qb = $this->createQueryBuilder('p');
$queryBuilder = $qb
->select("pa.titre, count(p.package)")
->join("p.package","pa")
->join("p.user","u")
->where("p.date between :debut and :fin")
->andWhere($qb->expr()->in("u.typeUser", $typesUser[0]))
->groupBy("pa.titre")
->orderBy("count(p.package) :ordre")
->setParameter('debut',$debut)
->setParameter('fin',$fin)
->setParameter('ordre', $ordre);
return $queryBuilder->getQuery()->getResult();
}
使用$ order,会出现此错误:
[语法错误]行0,列213:错误:预期的已知功能,得到了 “计数”
但是没有它,我的结果就是空的
有人可以帮我吗?
编辑:查询几乎是好的。问题仍然存在:
->andWhere($qb->expr()->in("u.typeUser", $typesUser))
我的$ tabUser是值得的:
答案 0 :(得分:3)
使用别名:
->select("pa.titre, count(p.package) as total")
按别名排序:
->orderBy("total", $ordre)