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

时间:2012-06-10 18:15:55

标签: php sql

我表格中的数据示例

post_id|post_title|post_status

1       i         1

2       love      0

3       sof       0

我遇到(OR)

的问题

我正在尝试这种情况

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'移到条件的最后,它应该在开始时

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:3)

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');

所以只需使用显式大括号