mysql - 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
语句,这在我的原始查询中很重要。
知道这是否可能吗?
解决方案
尝试这个
$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);
推荐阅读
- java - 映射返回布尔值的 Lambda 表达式
- javascript - 如何让 form::select 运行脚本来更改目标,以便每次选择不同的选项时样式都会发生变化?
- python - 如何在python中连接整数和字符串
- php - 如何将一个数组中的值添加到 PHP 中的一个新的空关联数组?
- c - 为什么 getchar() 函数在循环中的工作方式不同?
- filepond - Filepond:加载默认图像文件
- odoo - 如何对 Odoo 对象进行继承
- c++ - FindFirstFileW 通配符匹配
- python - Google App Engine 中的 Python 2 标准环境是否即将被弃用/关闭?
- html - 如何将 tabindex 设置为列表项内的按钮?