mysql,其中like和statement不起作用

时间:2014-10-28 14:09:41

标签: php mysql sql-like

我的网站上有一个搜索栏,并构建一个页面,以显示搜索中关键字具有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'(如果部分被管理员批准)。

4 个答案:

答案 0 :(得分:3)

您正在混合andor而没有任何(),这意味着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)

问题在于ORAND

的组合
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
")