php - 在 WHERE 子句中使用 MySQL CONCAT_WS 和另一个 WHERE 子句
问题描述
我在查询中使用CONCAT_WS,但我需要使用第二个 WHERE 子句将搜索限制在一个客户端。当我将两个 WHERE 子句添加在一起时,它会忽略我的第二个条件并显示所有客户的活动。
示例客户端:“ACME”和“NORTHWIND” - 我不能让 ACME 客户看到 NORTHWIND 的数据,反之亦然。
SELECT * FROM Campaigns WHERE CONCAT_WS (' ',id,created,campaign,client)
AND client = '$client' LIKE '%$search%'
如何使这些 WHERE 子句一起工作?
解决方案
你的条件绝对不合逻辑。
根据运算符优先级添加括号时,我们看到您的代码是:
SELECT *
FROM Campaigns
WHERE (CONCAT_WS(' ',id,created,campaign,client) AND ((client = '$client') LIKE '%$search%'))
即在你的条件下
- 比较
client = '$client'
获得一些X
(0、1 或 NULL) - 测试
X LIKE '%$search%'
获得一些Y
(0、1或NULL) - 执行
CONCAT_WS(' ',id,created,campaign,client) AND Y
得到相当不清楚的事情Z
- 测试是否
Z
可以将其视为 TRUE。
推荐阅读
- anylogic - 使用数据库中的动态事件和日期的自定义流程图中的 Rack Pick
- django - 如何通过beautifulsoup中的.find方法从嵌套标签中获取价值
- azure-cosmosdb - 安装后 ERR_CONNECTION_REFUSED 上的 Azure Cosmos DB
- javascript - 用于导出字段内容的带有 javascript 的 HTML 表单 - 无法阻止表单在按钮单击时重置
- docker - 带有 WSL2 的 Docker 桌面无法启动
- java - 如何在 Java 中使子类不可变?
- security - 输入向量 active scan zap owasp
- c# - 如何使用 C# 在 ASP.NET MVC 中创建 Crystal Report?
- python - 为什么我的代码要打印两次蓝莓?怎么了?
- angular - Angular:如何在您的存储桶 S3 上外包翻译?