多个SQL搜索 - OR命令

时间:2011-06-09 17:39:08

标签: php sql

我的用户现在可以按地址搜索订单。我想做的是让他们能够使用多个标准进行搜索。让他们按地址,城市,州等搜索。

我尝试使用以下代码,但它似乎无法正常工作。

$sql = ("SELECT order_number, sitestreet FROM  `PropertyInfo` WHERE  `sitestreet` LIKE '%$street%' OR `sitecity` LIKE '%$city%' AND `user` LIKE '$user'");

$result = mysql_query($sql);

我认为它不会读取$ user中的值,因为它会显示所有用户的所有订单。

如何使用多个搜索值搜索订单?

谢谢!

4 个答案:

答案 0 :(得分:3)

将OR语句包含在括号中,使其形成一个顶级条件,用户是另一个顶级条件:

$sql = '
  SELECT 
    `order_number`, 
    `sitestreet` 
  FROM  
    `PropertyInfo` 
  WHERE  
     (
        `sitestreet` LIKE "%'.$street.'%" OR 
        `sitecity` LIKE "%'.$city.'%"
     ) AND 
     `user` = '.$user;

另请注意,您希望与user列直接匹配,请使用=代替LIKE。我假设$user是数字ID ...

答案 1 :(得分:0)

如何尝试

$sql = ("SELECT order_number, sitestreet FROM PropertyInfo WHERE (sitestreet LIKE   
      '%$street%' OR sitecity LIKE '%$city%') AND user LIKE '$user'");

答案 2 :(得分:0)

AND的优先级高于OR(有关详细信息,请参阅http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html)。您需要将OR语句包装在括号中,以便在AND语句之前将其作为一个语句进行评估。

SELECT order_number, sitestreet 
FROM  `PropertyInfo` 
WHERE  (`sitestreet` LIKE '%$street%' OR `sitecity` LIKE '%$city%') 
AND `user` LIKE '$user'

答案 3 :(得分:0)

尝试:

$sql = ("
  SELECT order_number, sitestreet 
  FROM  `PropertyInfo` 
  WHERE  (`sitestreet` LIKE '%$street%' 
    OR `sitecity` LIKE '%$city%') 
  AND `user` LIKE '$user'");

您应该将OR组合在一起。它的编写方式我认为它是“如果街道匹配,忽略任何其他条件(OR)”,否则城市和用户都必须匹配。

另外,G molvi的观点很好,除非您正在寻找模式匹配,请使用=

HTH