Mysql 如何在多重相似查询中跳过空的相似运算符?

Mysql 如何在多重相似查询中跳过空的相似运算符?,mysql,Mysql,我注意到,如果其中一个类似变量为空,则我的查询行为不正确: SELECT name FROM employee WHERE name LIKE '%a%' AND color LIKE '%A%' AND city LIKE '%b%' AND country LIKE '%B%' AND sport LIKE '%c%' AND hobby LIKE '%C%' 现在,当a和a不为空时,它工作,但当a,a和c不为空时,c部分不被执

我注意到,如果其中一个类似变量为空,则我的查询行为不正确:

SELECT name 
FROM   employee 
WHERE  name LIKE '%a%' 
AND     color LIKE '%A%' 
AND     city LIKE '%b%' 
AND     country LIKE '%B%' 
AND     sport LIKE '%c%' 
AND     hobby LIKE '%C%' 
现在,当a和a不为空时,它工作,但当a,a和c不为空时,c部分不被执行,看起来是这样吗


如何修复此问题?

我假设您希望执行一个筛选器,仅在筛选器值非空时检查该值。在这种情况下,作为替代条件,检查变量是否为空

select name
from employee
where (@a is null or name like '%' + @a + '%')
   and (@b is null or color like '%' + @b + '%')
   ...
使用
IF()
函数

SELECT name 
  FROM employee 
 WHERE ( IF(LENGTH('%a') > 0, name LIKE '%a%' , 0)
    OR IF(LENGTH('%A') > 0, color LIKE '%A%', 0)
    OR IF(LENGTH('%b') > 0, city LIKE '%b%' , 0)
    OR IF(LENGTH('%B') > 0, country LIKE '%B%', 0) 
    OR IF(LENGTH('%c') > 0, sport LIKE '%c%' , 0)
    OR IF(LENGTH('%C') > 0, hobby LIKE '%C%' , 0) 
       )

sql查询的where子句正在查找来自
和/或
逻辑的
true/false
结果。因此,您可以从
IF()
函数返回要测试的表达式、测试结果或原始硬
true/false
值。

请发布您认为应该匹配但不匹配的记录。嗯,它返回错误我正在使用PHP`$sql=“SELECT*from employee,其中“$a”为null或类似“%”$a的名称。“%”和“%$b.”为null或颜色类似“%”“%$b.”“%”和“%$c.”为null或城市类似“%”“%$c.”“%”为null如果在PHP中构造查询,请检查变量是否为空,不要附加检查它的部分。也就是说,增量地构建查询字符串,只包括相关位。根据您的问题,我假设您指的是SQL变量,并且查询是在存储过程中执行的。我的代码示例是针对存储的proc.tx中的SQL,我从employee中提出了$SQL=“SELECT*”,其中(“$a.”为null或名称类似“%”“%$a.”“%”),以及(“$b.”为null或城市类似“%”“%$b.”“%”等…”但您使用empty的建议似乎更优雅,我将尝试一下