Laravel雄辩 – distinct()和count()不能正常工作在一起
所以我试图得到一个查询不同的pid的数量,但返回的值是错误的。
这是我试图做的:
$ad->getcodes()->groupby('pid')->distinct()->count()
什么返回值“2”,而它应该返回的值应该是“1”。
作为解决方法,我正在这样做:
count($ad->getcodes()->groupby('pid')->distinct()->get())
什么工作正常,并返回“1”
count和distinct是不是有相同的查询规则? 我find了解决方法种“重”,我想使原来的查询工作:(
以下应该工作
$ad->getcodes()->distinct('pid')->count('pid');
还有人遇到这个post,没有find其他的build议工作?
根据具体的查询,可能需要不同的方法。 就我而言,我需要计算一个GROUP BY
的结果,例如
SELECT COUNT(*) FROM (SELECT * FROM a GROUP BY b)
或使用COUNT(DISTINCT b)
:
SELECT COUNT(DISTINCT b) FROM a
经过一番困惑之后,我意识到没有内置的Laravelfunction。 所以最简单的解决scheme是使用DB::raw
和count
方法。
$count = $builder->count(DB::raw('DISTINCT b'));
请记住,在调用count
之前不要使用groupBy
。 如果您需要获取行,则可以稍后应用groupBy
。
我遇到了类似的问题,并find了解决这个问题的方法。
问题是Laravel的查询生成器处理聚合的方式。 它将返回第一个结果,然后返回“聚合”值。 这通常是好的,但是当你把计数与groupBy结合起来,你将返回每个分组项目的计数。 所以第一行的聚合只是第一组的计数(所以可能是像1或2这样低的东西)。
所以Laravel的计数已经出来了,但是我将Laravel查询生成器与一些原始SQL结合起来,以便精确计算我的分组结果。
对于你的例子,我期望下面的工作(并让你避免得到):
$query = $ad->getcodes()->groupby('pid')->distinct(); $count = count(\DB::select($query->toSql(), $query->getBindings()));
如果你想确保你不浪费时间select所有的列,你可以避免在build立你的查询时:
$query = $ad->select(DB::raw(1))->getcodes()->groupby('pid')->distinct();
这不会工作吗?
$ad->getcodes()->distinct()->get(['pid'])->count();
参阅这里讨论..
尝试以下操作:
$ad->getcodes()->groupby('pid')->distinct()->get()->count()
我遇到了同样的问题。
如果你安装laraveldebugging栏,你可以看到查询,并经常看到问题
$ad->getcodes()->groupby('pid')->distinct()->count()
改成
$ad->getcodes()->distinct()->select('pid')->count()
您需要将值设置为不同。 如果您不设置select字段,它将返回数据库中的所有列,并且全部将是唯一的。 因此,将查询设置为不同的,并只select组成您可能想要添加更多的“独特”值的列。 ->select('pid','date')
在一天中获取用户的所有唯一值
这是我的工作,所以试试这个:$ ad-> getcodes() – > distinct('pid') – > count()