(OR) 禁用条件的早期部分


(OR) disables the earlier part of the condition

表中数据的示例

post_id|post_title|post_status
1       i         1
2       love      0
3       sof       0

我有问题(或)

我正在尝试这个条件

WHERE post_status = '1' AND post_id = '1' OR post_title = 'i';
//it should return with i
// but it returned with love,sof

问题是由于条件末尾的 (OR) 引起的

它已被禁用条件的早期部分

那么,我如何才能正确使用OR?

我想按列、post_id和post_title在帖子中搜索

注意:

由于某种原因,我无法post_status='1'移动到条件的末尾,它应该在增益

你只需要用()进行逻辑分组,否则,无论是否匹配,OR条件(无论何时为真)都将取代所需的条件post_status = 1

WHERE post_status = '1' AND (post_id = '1' OR post_title = 'i');

在构造多部分WHERE子句时,您应该始终考虑逻辑组和优先级,尤其是在使用逻辑OR时,因为它会迅速破坏子句的其余部分。

AND的优先级高于OR,因此您的查询实际上是

WHERE (post_status = '1' AND post_id = '1') OR post_title = 'i';

看来你正在尝试这样做:

WHERE post_status = '1' AND (post_id = '1' OR post_title = 'i');

所以只需使用明确的大括号