Select 全部来自第一个 table 并按 Count(id) 从第二个 table 排序,其中 second.value = 1
Select all from first table and order by Count(id) from second table where second.value = 1
有两个table视频和反应。
我想按喜欢的降序对视频进行排序。
反应 table 好恶相同。 (我不想为喜欢和不喜欢创建两个不同的 table)。
reaction 列在 reactions table 中 reaction = 1
表示 likes , reaction = 2
表示不喜欢
问题是我的代码没有 where('reactions.reaction', 1)
returns 所有视频都按总反应 (likes + disslikes)
排序,我只需要按 likes
.[=21= 排序]
如果添加 where('reactions.reaction', 1) 那么我的查询将 returns 仅包含喜欢的视频而不是所有视频。
我想从 table 中获取所有视频按喜欢排序,而不仅仅是喜欢的视频。
我该怎么办?
$videos = Video::select('videos.id', DB::raw('count(reactions.id) as total'))
->leftJoin('reactions', 'reactions.at_video', '=', 'videos.id')
// ->where('reactions.reaction', 1) // I need this for only reactions
->groupBy('videos.id')
->orderBy('total', 'DESC')
->get();
dd($videos);
非常感谢 fake97 的解决方案。
我需要改变 ->where('reactions.reaction', 1)
至 >where(function ($q){ $q->where('reactions.reaction', 1)->orWhereNull(''reactions.reaction');})
见下方代码
$videos = Video::select('videos.id', DB::raw('count(reactions.id) as total'))
->leftJoin('reactions', 'reactions.at_video', '=', 'videos.id')
->where(function ($q){
$q->where('reactions.reaction', 1)->orWhereNull('reactions.reaction');
})
->groupBy('videos.id')
->orderBy('total', 'DESC')
->get();
dd($videos);
有两个table视频和反应。
我想按喜欢的降序对视频进行排序。
反应 table 好恶相同。 (我不想为喜欢和不喜欢创建两个不同的 table)。
reaction 列在 reactions table 中 reaction = 1
表示 likes , reaction = 2
表示不喜欢
问题是我的代码没有 where('reactions.reaction', 1)
returns 所有视频都按总反应 (likes + disslikes)
排序,我只需要按 likes
.[=21= 排序]
如果添加 where('reactions.reaction', 1) 那么我的查询将 returns 仅包含喜欢的视频而不是所有视频。
我想从 table 中获取所有视频按喜欢排序,而不仅仅是喜欢的视频。 我该怎么办?
$videos = Video::select('videos.id', DB::raw('count(reactions.id) as total'))
->leftJoin('reactions', 'reactions.at_video', '=', 'videos.id')
// ->where('reactions.reaction', 1) // I need this for only reactions
->groupBy('videos.id')
->orderBy('total', 'DESC')
->get();
dd($videos);
非常感谢 fake97 的解决方案。
我需要改变 ->where('reactions.reaction', 1)
至 >where(function ($q){ $q->where('reactions.reaction', 1)->orWhereNull(''reactions.reaction');})
见下方代码
$videos = Video::select('videos.id', DB::raw('count(reactions.id) as total'))
->leftJoin('reactions', 'reactions.at_video', '=', 'videos.id')
->where(function ($q){
$q->where('reactions.reaction', 1)->orWhereNull('reactions.reaction');
})
->groupBy('videos.id')
->orderBy('total', 'DESC')
->get();
dd($videos);