1

我的表中的数据示例

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'到条件的末尾,它应该在开始

4

2 回答 2

6

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

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

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

于 2012-06-10T18:17:29.287 回答
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');

所以只需使用显式大括号

于 2012-06-10T18:18:08.240 回答