首页 > 解决方案 > Laravel selectSub 与 IFNULL

问题描述

我有一个带有相关子查询的复杂查询,我想将它集成到我的 Laravel 应用程序中。

问题是子查询在 IFNULL 内。
查询很大,我试着写了一个非常精简的,只是为了演示:

SELECT payment_status_id, client_tbl.client_id
    IFNULL((SELECT payment_status_id
            FROM payment_status_tbl
            WHERE payment_status_tbl.client_id = client_tbl.client_id
            ORDER BY status_date DESC
            LIMIT 1), 0) AS current_status_id
FROM client_tbl
HAVING current_status_id < 4;

我在 Laravel 中找到了这个查询:

$query = DB::table('client_tbl')
            ->select(['payment_status_id', 'client_tbl.client_id'])
            ->selectSub(function($query) {
                $query->select('payment_status_id')
                    ->from('payment_status_tbl')
                    ->where('payment_status_tbl.client_id', '=', 'client_tbl.client_id')
                    ->orderByDesc('status_date')
                    ->limit(1);
            }, 'current_status_id')
            ->having('current_status_id', '<', 4);

但它不包括该IFNULL语句,这在我的原始查询中很重要。

知道这是否可能吗?

标签: mysqllaravellaravel-5eloquent

解决方案


尝试这个

$query = DB::table('client_tbl')
            ->select(['payment_status_id', 'client_tbl.client_id'])
            ->selectSub(function($query) {
             $getId = DB::table('payment_status_tbl')
             ->where('payment_status_tbl.client_id','`client_tbl.client_id`')
             ->select('payment_status_id')
             ->orderBy('status_date','DESC')
             ->first();
             $query->empty($getId)? 0 : $getId->payment_status_id;

            }, 'current_status_id')
            ->having('current_status_id', '<', 4);

推荐阅读