首页 > 解决方案 > 在 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 子句一起工作?

标签: phpmysql

解决方案


你的条件绝对不合逻辑。

根据运算符优先级添加括号时,我们看到您的代码是:

SELECT * 
FROM Campaigns 
WHERE (CONCAT_WS(' ',id,created,campaign,client) AND ((client = '$client') LIKE '%$search%'))

即在你的条件下

  1. 比较client = '$client'获得一些X(0、1 或 NULL)
  2. 测试X LIKE '%$search%'获得一些Y(0、1或NULL)
  3. 执行CONCAT_WS(' ',id,created,campaign,client) AND Y得到相当不清楚的事情Z
  4. 测试是否Z可以将其视为 TRUE。

推荐阅读