SQL 语法 AND OR 子句问题
SQL Syntax AND OR clause issues
我正在使用以下查询数据库:
SELECT * FROM DB.table WHERE
hidden = 0 AND
column1 LIKE '%$search%' OR
column2 LIKE '%$search%';
然而,即使隐藏列为 1,它仍会输出查询。
这可能很简单,但我想我看得太多了。
将 OR
条件括起来。
默认的优先级是这样的:
(hidden = 0 AND column1 LIKE '%$search%')
OR (column2 LIKE '%$search%')
您希望它以这种方式运行:
(hidden = 0)
AND (column1 LIKE '%$search%' OR column2 LIKE '%$search%')
如果您曾经学习过布尔代数或逻辑,您可能还记得 logical AND 与正则乘法相似,而 logical OR 具有对应加法。因此,如果您考虑初中代数 class 中的运算顺序,这是记住这一点的好方法。您可能会养成每次在查询中看到 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%';
因为 AND
/OR
的优先规则。有几种方法可以解决此问题:
SELECT *
FROM DB.table
WHERE hidden = 0 AND
(column1 LIKE '%$search%' OR column2 LIKE '%$search%');
有时,连接 LIKE
:
的字段很方便
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%';
然而,即使隐藏列为 1,它仍会输出查询。
这可能很简单,但我想我看得太多了。
将 OR
条件括起来。
默认的优先级是这样的:
(hidden = 0 AND column1 LIKE '%$search%')
OR (column2 LIKE '%$search%')
您希望它以这种方式运行:
(hidden = 0)
AND (column1 LIKE '%$search%' OR column2 LIKE '%$search%')
如果您曾经学习过布尔代数或逻辑,您可能还记得 logical AND 与正则乘法相似,而 logical OR 具有对应加法。因此,如果您考虑初中代数 class 中的运算顺序,这是记住这一点的好方法。您可能会养成每次在查询中看到 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%';
因为 AND
/OR
的优先规则。有几种方法可以解决此问题:
SELECT *
FROM DB.table
WHERE hidden = 0 AND
(column1 LIKE '%$search%' OR column2 LIKE '%$search%');
有时,连接 LIKE
:
SELECT *
FROM DB.table
WHERE hidden = 0 AND
CONCAT(column1, ' ', column2) LIKE '%$search%'
(这不完全一样。)
如果您正在进行此类搜索,您可能应该了解 match
。全文索引通常是此类查询的最佳解决方案,尤其是在您关心性能的情况下。