我正在尝试创建一个简单的搜索脚本。
所以我写了以下内容:
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 state = 1
失败,我得到的结果为-2
。怎么可能呢?
这是我在PHPmyadmin中使用查询时的结果:
当清楚地写state
必须是1
时,如何仍能得到该结果。
答案 0 :(得分:4)
您需要在括号内应用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%')
答案 1 :(得分:2)
您需要括号:
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[[:>:]]');