3 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
查詢應(yīng)該是:
$posts = Post::selectRaw('posts.*, count(post_views.id) as views_count')
->join('post_views', function($join) {
$join->on('posts.id', '=', 'post_views.post_id')
->where('post_views.created_at', '>=', 'DATE_ADD(CURDATE(), INTERVAL -30 DAY)');
})
->groupBy('posts.id')
->orderBy('views_count', 'DESC')
// ->take(10) // no need of this
//->get(); // will be using paginate
->paginate(10);

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊
你有沒有嘗試過
PostViews::where('created_at', '>=', 'DATE_ADD(CURDATE(), INTERVAL -30 DAY)')->groupBy('post_id')->selectRaw('count(*) as post_count')->with('post')->paginate(10);
假設(shè)你有一個(gè)索引 created_at

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊
我已經(jīng)弄清楚了 - join->where 子句被轉(zhuǎn)義并使查詢無效。不是無效的sql,只是一個(gè)無效的比較,這樣總是沒有結(jié)果。
當(dāng)然,查詢記錄器并沒有顯示它被轉(zhuǎn)義了,所以將查詢復(fù)制到 mysql 中是可行的,這使得追蹤起來比原本應(yīng)該的要困難得多。
這有效:
$posts = Post::select('posts.*', DB::raw('count(post_views.id) as views_count'))
->join('post_views', function($join) {
$join->on('posts.id', '=', 'post_views.post_id')
->where('post_views.created_at', '>=', DB::raw('DATE_ADD(CURDATE(), INTERVAL -30 DAY)'));
})
->groupBy('posts.id')
->orderBy('views_count', 'DESC')
重要的是:DB::raw('DATE_ADD(CURDATE(), INTERVAL -30 DAY)')
- 3 回答
- 0 關(guān)注
- 167 瀏覽
添加回答
舉報(bào)