从PHP mySQL搜索结果中排除值

时间:2014-03-15 01:11:45

标签: php mysql search syntax

我已经阅读了在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”从搜索结果中排除特定值,或者如果排除仅适用于基本代码,只需调用数据库中的值来显示,而不一定使用搜索表单。

1 个答案:

答案 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中不平等的常用表示法是<>,而不是!=