Mysql SQL语法和OR子句问题

Mysql SQL语法和OR子句问题,mysql,where-clause,Mysql,Where Clause,我正在使用以下命令查询数据库: SELECT * FROM DB.table WHERE hidden = 0 AND column1 LIKE '%$search%' OR column2 LIKE '%$search%'; 但是,即使隐藏列为1,它仍会输出查询 这可能很简单,但我想我已经看得太多了。在或'd条件周围加上括号 默认情况下,优先级如下所示: (hidden = 0 AND column1 LIKE '%$search%') OR (column2 LIKE '%$s

我正在使用以下命令查询数据库:

SELECT * FROM DB.table WHERE 
hidden = 0 AND
column1 LIKE '%$search%' OR
column2 LIKE '%$search%';
但是,即使隐藏列为1,它仍会输出查询


这可能很简单,但我想我已经看得太多了。

'd条件周围加上括号

默认情况下,优先级如下所示:

    (hidden = 0 AND column1 LIKE '%$search%')
OR  (column2 LIKE '%$search%')
    (hidden = 0)
AND (column1 LIKE '%$search%' OR column2 LIKE '%$search%')
您希望它的行为方式如下:

    (hidden = 0 AND column1 LIKE '%$search%')
OR  (column2 LIKE '%$search%')
    (hidden = 0)
AND (column1 LIKE '%$search%' OR column2 LIKE '%$search%')

如果你曾经学习过布尔代数或逻辑,你可能会记得逻辑AND与常规乘法有相似之处,而逻辑or与加法有对应关系。所以,如果你想一想初中代数课上的运算顺序,这是记住这个的好方法。您可能会养成在查询中看到
时检查的习惯。

'd条件周围加上括号

    SELECT * FROM DB.table WHERE 
    hidden = 0 AND   
    (column1 LIKE '%$search%' OR 
    column2 LIKE '%$search%');
默认情况下,优先级如下所示:

    (hidden = 0 AND column1 LIKE '%$search%')
OR  (column2 LIKE '%$search%')
    (hidden = 0)
AND (column1 LIKE '%$search%' OR column2 LIKE '%$search%')
您希望它的行为方式如下:

    (hidden = 0 AND column1 LIKE '%$search%')
OR  (column2 LIKE '%$search%')
    (hidden = 0)
AND (column1 LIKE '%$search%' OR column2 LIKE '%$search%')

如果你曾经学习过布尔代数或逻辑,你可能会记得逻辑AND与常规乘法有相似之处,而逻辑or与加法有对应关系。所以,如果你想一想初中代数课上的运算顺序,这是记住这个的好方法。您可能会养成在查询中看到
时检查此项的习惯。

您的查询被解析为:

    SELECT * FROM DB.table WHERE 
    hidden = 0 AND   
    (column1 LIKE '%$search%' OR 
    column2 LIKE '%$search%');
SELECT *
FROM DB.table
WHERE (hidden = 0 AND
       column1 LIKE '%$search%'
      ) OR
      column2 LIKE '%$search%';
因为
/
的优先规则。有几种方法可以解决此问题:

SELECT *
FROM DB.table
WHERE hidden = 0 AND
      (column1 LIKE '%$search%' OR column2 LIKE '%$search%');
有时,可以方便地将
的字段连接起来,如

SELECT *
FROM DB.table
WHERE hidden = 0 AND
      CONCAT(column1, ' ', column2) LIKE '%$search%'
(这不完全一样。)


如果您正在进行此类搜索,您可能应该了解
match
。全文索引通常是此类查询的最佳解决方案,特别是在您关心性能的情况下。

您的查询被解析为:

SELECT *
FROM DB.table
WHERE (hidden = 0 AND
       column1 LIKE '%$search%'
      ) OR
      column2 LIKE '%$search%';
因为
/
的优先规则。有几种方法可以解决此问题:

SELECT *
FROM DB.table
WHERE hidden = 0 AND
      (column1 LIKE '%$search%' OR column2 LIKE '%$search%');
有时,可以方便地将
的字段连接起来,如

SELECT *
FROM DB.table
WHERE hidden = 0 AND
      CONCAT(column1, ' ', column2) LIKE '%$search%'
(这不完全一样。)


如果您正在进行此类搜索,您可能应该了解
match
。全文索引通常是此类查询的最佳解决方案,特别是如果您关心性能的话。

谢谢,这就是问题所在!谢谢,这就是问题所在!