mysql - 编写此查询的正确方法是什么?
问题描述
我有一个查询没有返回它应该返回的所有结果。我正在使用 Laravel,但是如果我直接在 PHPMyAdmin 中编写查询,结果是一样的:
clientpages::selectRaw('page as value, COUNT(ID) as `count`')
->where('page', 'like', '%blog%')
->orWhere('page', 'like', '%home%')
->whereBetween('date', [$range['from'], $range['to']]);
问题是查询只处理第一个like
。它只返回其中包含的页面,blog
而不返回带有home
. 罪魁祸首是日期条件。如果我删除它,它会按预期工作,但是同时使用这三个条件的正确方法是什么?
解决方案
就像您将普通的 SQL 查询包装在括号中一样,您可以在 Laravel 中执行相同的操作,如下所示:
clientpages::selectRaw('page as value, COUNT(ID) as `count`')
->where(function($query) {
$query->where('page', 'like', '%blog%')
->orWhere('page', 'like', '%home%')
})
->whereBetween('date', [$range['from'], $range['to']]);
推荐阅读
- python-3.x - TF | 训练完成后如何从 CNN 进行预测
- javascript - 在嵌套的承诺被解决后运行一个函数
- c++ - C++ 中的值语义和移动语义之间有什么联系?
- php - 无法从 Codeigniter for Ubuntu 中删除 index.php
- php - PHP 帮助从提交的表单中请求信息
- java - 如何在Java文件中的两个字符串之间获取行?
- windows - Windows 如何查找共享文件、打印机等
- html - 如何在css中将顶行移动到文本的底部
- c# - 如何在 WinAPI 中获取按钮状态?
- iphone - 使用 RxSwift 在 DispatchGroup 之后返回对象