我正在尝试过滤我的产品,但我似乎只能获得实际存储了视图的产品。
我如何设置" IF NULL = 0"甚至更聪明?
这是我的代码:
if ($request->sort == 'views') {
$query->leftJoin('analytics', 'foreign_id', '=', 'ads.id');
$query->selectRaw('ads.*, IFNULL(count(analytics.id),0) as views');
$query->orderBy('views', "$sort_order");
}
我的数据库看起来像这样: id | ip | foreign_id | foreign_type | updated_at | created_at
现在我在我的数据库中有一行,并且具有该ID的产品是唯一显示的行。
提前感谢你。
答案 0 :(得分:2)
解决方案是分组,然后它完美地工作。
if ($request->sort == 'views') {
$query->leftJoin('analytics', 'foreign_id', '=', 'ads.id');
$query->selectRaw('ads.*, count(analytics.id) as views');
$query->orderBy('views', "$sort_order");
$query->groupBy('ads.id');
}
答案 1 :(得分:0)
我认为COALESCE
(假设MySQL)是您正在寻找的。试试这个:
if ($request->sort == 'views') {
$query->leftJoin('analytics', 'foreign_id', '=', 'ads.id');
$query->selectRaw('ads.*, COALESCE(count(analytics.id),0) as views');
$query->orderBy('views', "$sort_order");
}
答案 2 :(得分:0)
if ($request->sort == 'views') {
$query->leftJoin('analytics', 'foreign_id', '=', 'ads.id');
$query->whereNotNull('analytics');
$query->selectRaw('ads.*, analytics.id as views');
$query->orderBy('views', "$sort_order");
}
我现在留下这个作为建议 - 我很确定它不会按照您的意愿行事,但它只是提供了一些指示