我有一个列名为firmware_flash_result的表,该表失败或通过。 查询构建器为Pass返回正确的结果,但为失败则返回错误的结果。
实际查询和结果:
SELECT COUNT(DISTINCT `payment_module_id`)
FROM `payment_prod_pograms`
WHERE `created_at` >= "2018-09-17 00:00:00" AND
(
`payment_module_id` LIKE "PB10____18____" OR
`payment_module_id` LIKE "PM10____18____"
) AND
CHAR_LENGTH(`payment_module_id`) = 14 AND
`firmware_flash_result` = "FAIL";
+-------------------------------------+
| COUNT(DISTINCT `payment_module_id`) |
+-------------------------------------+
| 0 |
+-------------------------------------+
Laravel查询生成器:
$payment_prod_failed_test = DB::table('payment_prod_pograms')
->where('created_at','>=','2018-09-17 00:00:00')
->whereRaw('char_length(payment_module_id) = 14')
->where('payment_module_id','like','%PB10____18____%')
->orWhere('payment_module_id','like','%PM10____18____%')
->where('firmware_flash_result','=','FAIL')
->distinct()
->count('payment_module_id');
以上查询返回的结果453是不可能的。
经过一些调试后,我发现:
->orWhere('payment_module_id','like','%PM10____18____%')
导致此错误的原因是什么?
数据库中有1515个条目,所有这些条目均已通过,但此查询返回的结果不同。 我在这里做错了什么? 任何帮助将不胜感激
答案 0 :(得分:1)
您正在将您的where payment_module_id分组为%PB10 ____ 18 ____%或%PM10 ____ 18 ____%,因此您需要在雄辩的查询中执行相同的操作。这是通过使用闭包完成的。
$payment_prod_failed_test = DB::table('payment_prod_pograms')
->where('created_at','>=','2018-09-17 00:00:00')
->whereRaw('char_length(payment_module_id) = 14')
->where(function($query) {
$query->where('payment_module_id','like','%PB10____18____%')
->orWhere('payment_module_id','like','%PM10____18____%');
})
->where('firmware_flash_result','=','FAIL')
->distinct()
->count('payment_module_id');