Laravel - selectRaw计数 - IF NULL设置为零

时间:2017-02-06 14:35:17

标签: laravel laravel-5.2

我正在尝试过滤我的产品,但我似乎只能获得实际存储了视图的产品。

我如何设置" 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的产品是唯一显示的行。

提前感谢你。

3 个答案:

答案 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");
}

我现在留下这个作为建议 - 我很确定它不会按照您的意愿行事,但它只是提供了一些指示