我的网站上有一个搜索栏,并构建一个页面,以显示搜索中关键字具有LIKE描述和LIKE部件名称的部分。
is_sold将始终为1或0的int。
当被批准在主页,搜索或类别列表中显示时,part_status将始终为1。
这是我的sql语句
$result = mysql_query("
SELECT *
FROM part
WHERE part_name LIKE '%" . $get_search . "%'
OR part_desc LIKE '%" . $get_search ."%'
AND is_sold = 0
AND part_status = 1
ORDER BY id DESC
")
无论是否批准,无论是否出售,都会列出这些部件。
我最后的问题是我为'is_sold'设置了int数字的AND(部分被出售,'part_status'(如果部分被管理员批准)。
答案 0 :(得分:3)
您正在混合and
和or
而没有任何()
,这意味着MySQL将应用其内部运算符优先级规则:http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html
你可能想要:
((part_name LIKE x) OR (part_desc LIKE X)) AND (is_sold = 0) AND (part_status = 1)
请注意or
组件周围的额外括号。
答案 1 :(得分:2)
问题在于OR
和AND
:
WHERE part_name LIKE '%" . $get_search . "%'
OR part_desc LIKE '%" . $get_search ."%'
AND is_sold = 0
AND part_status = 1
现在当第二个条件匹配时 - OR
条件 - 整个语句的结果为true
。
您需要以下内容:
WHERE (part_name LIKE '%" . $get_search . "%'
OR part_desc LIKE '%" . $get_search ."%')
AND is_sold = 0
AND part_status = 1
答案 2 :(得分:2)
你必须用括号()构建你的条件,就像这样
$result = mysql_query("
SELECT *
FROM part
WHERE (part_name LIKE ('%" . $get_search . "%')
OR part_desc LIKE ('%" . $get_search ."%'))
AND is_sold = 0
AND part_status = 1
ORDER BY id DESC
");
答案 3 :(得分:1)
虽然我同意esqew(你真的不应该使用mysql_query),试试这个:
$result = mysql_query("
SELECT *
FROM part
WHERE (part_name LIKE '%" . $get_search . "%'
OR part_desc LIKE '%" . $get_search ."%')
AND is_sold = 0
AND part_status = 1
ORDER BY id DESC
")