我已经阅读了在PHP和mySQL中排除结果但我似乎无法弄清楚我正在使用的搜索代码的正确语法。
在我的所有其他结果表中,只需从数据库中提取信息而不必使用搜索表单,只需在“WHERE”语句后包含以下内容即可轻松实现排除userlevels:
WHERE `userlevel` !='9' AND `userlevel` !='1' AND `userlevel` !='4' AND `userlevel` !='5' AND `userlevel` !='6'
现在,我使用的搜索代码使用“OR”代替“AND”和“LIKE”。它看起来像这样:
//Set the MySQL query
if ($search == NULL or $search == '%'){
} else {
for ($i=0; $i<count($keywords); $i++) {
$query = "SELECT * FROM sound_users " .
"WHERE genre LIKE '%".$keywords[$i]."%'".
" OR genre2 LIKE '%".$keywords[$i]."%'" .
" OR genre3 LIKE '%".$keywords[$i]."%'" .
" OR bandname LIKE '%".$keywords[$i]."%'" .
" ORDER BY genre";
}
我在其他一些论坛中看到“NOT IN(SELECT *)....”被用来排除数据,但似乎每个代码都使用不同的标点 - 有不同的语法 - 所以我不太确定如何使用此搜索代码排除特定值。
我尝试过简单的角度:
" OR userlevel !='5'" .
" OR userlevel !='9'" .
并且只对搜索结果做了一些时髦的事情,其中包括两个用户级别同时在彼此叠加的两个不同的表格中。所以我将“OR”更改为“AND” - 就像它在我的其他代码中一样,但也没有用。
此时,我试图添加我发现的“NOT IN”和“NOT EXISTS”示例,但无论如何,似乎总是带着错误告诉我检查语法。
我想知道是否甚至可以使用“OR”从搜索结果中排除特定值,或者如果排除仅适用于基本代码,只需调用数据库中的值来显示,而不一定使用搜索表单。
答案 0 :(得分:0)
括号是你的朋友!
WHERE
(X LIKE '%X%' OR Y LIKE '%Y%' OR Z LIKE '%Z%')
AND
(X NOT LIKE '%XX%' OR Y<>'abc' OR LENGTH(Z)<5 OR A<>7)
BETWEEN:SQL中不平等的常用表示法是<>
,而不是!=