通过getSingleScalarResult()和groupBy()获取计数查询结果 - 异常

时间:2017-04-04 08:40:10

标签: php mysql symfony doctrine-orm group-by

我希望得到我的查询结果(限制为10)+计算可能的结果。 我知道有类似的问题和答案。

for example here

但如果我尝试计算可能的行数(通过getSingleScalarResult()),我将获得除{:1}}

The query returned multiple rows. Change the query or use a different result function like getScalarResult().

我只需要一个整数whitch代表我查询的所有结果。 我怎样才能得到这个计数?非常适合db。

修改

如果我删除 $query = $repository ->createQueryBuilder('t') ->select('COUNT(t.katId)', 't.hotel', 't.title', 't.desc', 'picture', 'MIN(t.price) AS price'); $query->where('t.visible = (:visible)')->setParameter('visible', 1); // + some wheres, where in, more than.... $query->groupBy('t.hotel'); $query->setMaxResults(10); echo $query->getQuery()->getSingleScalarResult(); exit(); 并选择仅保留$query->groupBy('t.hotel'); ,那么它可以正常工作。但我需要->select('count(t.katId)');,因为它会对结果进行实际计算。

我将它分为两​​个查询,以便在尝试任何计数信息之前将我回滚的结果更改为状态,并使克隆此查询(在设置groupBysetMaxResults之前),更改选择(保持所有人,并获取计数信息。

如果有人提供更好的解决方案,我将不胜感激

  1. 获得结果:

    • 从选择
    • 中删除了COUNT()
    • 要求将结果更改为“正常”groupBy
  2. 获取计数:

    ->getArrayResults

2 个答案:

答案 0 :(得分:1)

如果您需要保留groupBy:

$query = $repository->createQueryBuilder('t')
$query->select('COUNT(t.katId)', 't.hotel', 't.title', 't.desc', 'picture', 'MIN(t.price) AS price');
$query->from(ENTITY STRING, 't', 't.hotel');  //here defined your array result key
$query->where('t.visible = (:visible)')->setParameter('visible', 1);
$query->groupBy('t.hotel');
$query->setMaxResults(10);

echo $query->getQuery()->getScalarResult();
exit();

编辑:新编辑有效吗?

答案 1 :(得分:0)

你只对COUNT(t.katId)感兴趣,所以你应该删除其他返回的字段't.hotel','t.title'等。 结果将包含单个返回值(单个标量结果),因此不需要$query->setMaxResults(10)