2013-01-14 143 views
0

我有一个问题得到它的工作。我有多个WHERE语句需要根据搜索查询中的条件信息进行。在那里我似乎无法获得LIKE声明。SQL像声明与多个WHERE子句

在数据库中,STREET_NUM & STREET_NAME在不同的行中。我正在使用一个输入字段来检查被称为$address

我也努力获得MIN & MAX工作。

下面是该查询:

$sql = "SELECT * FROM arc_property_res WHERE (arc_property_res.STATUS = 'Active'"; 
     if(!empty($_GET['city'])){ 
      // City only query! 
      $sql .= "AND arc_property_res.CITY = '{$_GET['city']}'"; 
     } 
     if(!empty($_GET['neighborhood'])){ 
      // Hood only query! 
      $sql .= "AND arc_property_res.SUBDIVISION = '{$_GET['neighborhood']}'"; 
     } 
     if(!empty($_GET['mls-number'])){ 
      // MLS only query! 
      $sql .= "AND arc_property_res.MLS_ACCT = '{$_GET['mls-number']}'"; 
     } 
     if(!empty($_GET['min-price']) && !empty($_GET['max-price'])){ 
      // MIN AND MAX only query! 
      $sql .= "AND arc_property_res.LIST_PRICE = MIN('{$_GET['min-price']}') MAX('{$_GET['max-price']}')"; 
     } 
     if(!empty($_GET['num-of-beds'])){ 
      // BEDS only query! 
      $sql .= "AND arc_property_res.BEDROOMS = '{$_GET['num-of-beds']}'"; 
     } 
     if(!empty($_GET['num-of-baths'])){ 
      // BATHS only query! 
      $sql .= "AND arc_property_res.BATHS_FULL = '{$_GET['num-of-baths']}'"; 
     } 
     if(!empty($_GET['mls-number'])){ 
      // BATHS only query! 
      $sql .= "AND arc_property_res.MLS_ACCT = '{$_GET['mls-number']}'"; 
     } 
     if(!empty($_GET['address'])){ 
      $sql .= "AND arc_property_res.STREET_NUM LIKE '%{$_GET['address']}'"; 
      $sql .= "OR arc_property_res.STREET_NAME LIKE '{$_GET['address']}%'"; 
     } 

    $sql .= ") ORDER BY {$orderby}{$price_order}{$comma}{$list_date}"; 
+0

您可以发布您的结果查询,只是为了方便阅读。 – Elwi

回答

1

我认为,所有你需要的是arc_property_res.STREET_NUM周围的一些小括号。此外,我建议您在整个代码的每一行周围添加一些空格,以免出现语法错误。

if(!empty($_GET['address'])){ 
    $sql .= " AND (arc_property_res.STREET_NUM LIKE '%{$_GET['address']}' "; 
    $sql .= " OR arc_property_res.STREET_NAME LIKE '{$_GET['address']}%') "; 
} 
+0

嗯,尝试但没有。它只适用于如果我只放置一个地址NUM或只是街道名称,但它不会查找使用OR语句。 –

+0

@IamDanGavin你已经手动尝试过查询吗? – Kermit

+0

我已更新我的代码以反映您提供的内容。它仍然将它们视为单独的项目,并且不会同时查找这两个项目。 –

1

除了明显"Bobby Tables" issue that your query has,手头的问题是,你不要在前面AND插入空格。这导致像这样的查询:

AND arc_property_res.BEDROOMS =3AND arc_property_res.BATHS_FULL =2 

注意,有3AND之间没有空格 - 语法错误。

您应该查看参数化查询,并以忽略已设置为NULL的参数的方式进行修改。

SELECT * FROM arc_property_res WHERE (arc_property_res.STATUS = 'Active' 
AND (arc_property_res.CITY = @cityParam OR @cityParam is NULL) 
AND (arc_property_res.SUBDIVISION = @subdiv OR @subdiv is NULL) 
... 
) 

此修改将让你保持查询不管实际已设置参数的数量相同,你得到相同的结果,以几乎相同的时间。

+0

真棒链接:D –

1

$sql .= "AND arc_property_res.LIST_PRICE = MIN('{$_GET['min-price']}') MAX('{$_GET['max-price']}')";

的最小和最大的功能是,当你想获得一个字段的最小值和最大值在你的数据库。

你想要的是比较标价,看它是否落在用户提供的最小值和最大值之间。

$sql .= " AND arc_property_res.LIST_PRICE >= '{$_GET['min-price']}' AND arc_property_res.LIST_PRICE <= '{$_GET['max-price']}'";