精炼我的口才查询(Laravel)
问题描述:
编辑的净度:精炼我的口才查询(Laravel)
我需要一些方法为这个查询只查询的
->wherein('course_id', $array)
一部分返回不同的course_ids。它可以获得已完成课程的总数,但如果用户已经完成课程的次数超过一次,则将其计入总数。所以如果你想知道有多少学生完成了一门课程,如果一个学生不止一次地完成了一门课程,这个数字将会被关闭。
public function report_count(){
$array = \Session::get('course_report')['course'];
return $this->hasOne('Tracking', 'roster_id')
->selectRaw('roster_id, count(*) as aggregate')
->where('status', 1)
->wherein('course_id', $array)
->groupBy('roster_id');
我试过在最后加入groupBy('course_id')但它不起作用。
答
固定。改变了查询
return $this->hasOne('Tracking', 'roster_id')
->selectRaw('roster_id, count(distinct course_id) as aggregate')
->where('status', 1)
->wherein('course_id', $array)
->groupBy('roster_id');
每@Robin [R建议下,我去了一个搜索的方式来利用SQL中我selectRaw查询,而不是这个困难的雄辩的语言。感谢所有帮助我集思广益的人。
+0
很高兴听到它帮助!将您自己的答案标记为已解决。 – Robin
这个统计信息可以在cronjob中生成吗? –
这是一个内存问题吗?超时问题?您可以将查询分块,或通过cron预处理它们。您是否使用调试栏来查看您的查询是什么样的? – Blake
首先是内存问题。我提高了记忆力,现在我相信它超时了。我们已经有很多cronjob了,但我可以与高级开发人员核对一下,看看他是否对这些预先运行有任何想法。我一直在使用debugbar,对花名册的查询很好,然后对每个关系吐出n + 1个查询。我试图加载查询,但它只是将每个已完成课程的值更改为0。 –