[英]Why am I getting a wrong result from this SQL query?
您需要在括号内套用OR子句
SELECT * FROM snm_content WHERE state = 1 AND `catid` NOT IN ('15', '23') AND
(`title` LIKE '%test%' OR `introtext` LIKE '%test%' OR `fulltext` LIKE '%test%')
您需要括号:
SELECT *
FROM snm_content
WHERE
state = 1 AND
catid NOT IN (15, 23) AND
(title LIKE '%test%' OR introtext LIKE '%test%' OR fulltext LIKE '%test%');
由于操作规则的顺序,您当前的WHERE
子句被解释为:
WHERE
((state = 1 AND
catid NOT IN (15, 23)) AND
title LIKE '%test%') OR introtext LIKE '%test%' OR fulltext LIKE '%test%';
也就是说, title
字段必须与通配符表达式匹配才能返回任何内容。
顺便说一句,如果您要在这些字段中匹配文字test
,请考虑将REGEXP
与单词边界一起使用:
SELECT *
FROM snm_content
WHERE
state = 1 AND
catid NOT IN (15, 23) AND
(title REGEXP '[[:<:]]test[[:>:]]' OR introtext REGEXP '[[:<:]]test[[:>:]]' OR
fulltext REGEXP '[[:<:]]test[[:>:]]');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.