mysql - Laravel:查询生成器生成器返回与实际 mysql 查询不同的结果
问题描述
我有一个列名为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 个条目,它们都通过了,但是这个查询返回了不同的结果。我在这里做错了什么?任何帮助将不胜感激
解决方案
您将 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');
推荐阅读
- r - 如何循环遍历参数值、运行函数和保存结果
- python - 无法通过 del 函数删除 DataFrame Pandas 中的列
- python - 多包 Python 项目发布管道
- r - R: ggplot 在聚类分析后可视化每个聚类中的所有变量
- microcontroller - 使用 Lauterbach for Multicore 控制器在启动时设置断点失败
- vega-lite - 在 Vega-lite 中画笔放大 X 和 Y
- ios - ios - 如果太长,Eureka ActionSheetRow 选项文本会折叠
- c# - 恢复数据visual studio2019
- javascript - Javascript XMLHttpRequest 和 Jquery $.ajax 都返回当前页面的 HTML 代码
- c# - 使用 IList 查看模型
添加数据失败