2016-09-14 45 views
0

編輯的淨度:精煉我的口才查詢(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')但它不起作用。

+0

這個統計信息可以在cronjob中生成嗎? –

+0

這是一個內存問題嗎?超時問題?您可以將查詢分塊,或通過cron預處理它們。您是否使用調試欄來查看您的查詢是什麼樣的? – Blake

+0

首先是內存問題。我提高了記憶力,現在我相信它超時了。我們已經有很多cronjob了,但我可以與高級開發人員覈對一下,看看他是否對這些預先運行有任何想法。我一直在使用debugbar,對花名冊的查詢很好,然後對每個關係吐出n + 1個查詢。我試圖加載查詢,但它只是將每個已完成課程的值更改爲0。 –

回答

0

固定。改變了查詢

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