我有一個查詢,當我不使用特定連接時,它會回傳正確的結果。但是當我添加另一個聯接時,計數顯示完全不同的結果。我不明白為什么會這樣。
這是我的查詢:
$query = DB::table('contentable_tips')
->join('content', 'contentable_tips.content_id', '=', 'content.id')
->join('users', 'content.author_id', '=', 'users.id')
->join('contentable_subcategories', 'content.parent_id', '=', 'contentable_subcategories.content_id')
->join('content as subcategory', 'contentable_subcategories.content_id', '=', 'subcategory.id')
->join('content as category', 'subcategory.parent_id', '=', 'category.id')
->join('content as comment_content', 'contentable_tips.content_id', '=', 'comment_content.parent_id')
->join('contentable_comments', 'comment_content.id', '=', 'contentable_comments.content_id')
->groupBy('contentable_tips.content_id');
$query = $query->select(
'category.slug as parent_slug',
'content.id',
'contentable_tips.title',
'contentable_tips.name',
'contentable_tips.likes_count',
'contentable_tips.content',
'contentable_subcategories.content_id',
'contentable_subcategories.title as subject',
'content.author_id',
'users.public as author_public',
'users.name as author_name',
DB::raw('count(contentable_comments.id) as comment_count'),
)
->groupBy('contentable_subcategories.id')
->orderBy('likes_count', 'desc')
->limit($limit)
->get();
但是當我添加這個加入時:
->join('content_likes', function ($join) {
$join->on('content_likes.content_id', '=', 'contentable_tips.content_id')
->where('content_likes.created_at', '>=', now()->subMonth());
})
例如,評論數從 20 變為 800。這顯然是不正確的,我也在我的資料庫中檢查了這一點。我想根據過去一個月的點贊數添加 likes_count。我還洗掉了選擇,因為當我從表中contentable_tips.likes_count獲得類似計數時不再需要它。content_likes這就是我添加這個特定連接的原因。
我之前已經嘗試過加入content表格,content_likes但這沒有用。我只是不明白為什么添加所有這些連接不是問題,但是當我添加這個連接時,它突然顯示錯誤的結果。
如果需要更多資訊,我會提供。
uj5u.com熱心網友回復:
我設法找到了解決方案。我添加了一個原始查詢,根據 created_at 日期計算喜歡的次數:
->leftJoin(DB::raw('(SELECT content_id, count(id) as likes FROM content_likes WHERE created_at >= now() - interval 1 month group by content_id) as content_likes'),'content_likes.content_id', '=', 'contentable_tips.content_id')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/463814.html
