0

我在让它工作时遇到问题。我有多个 WHERE 语句需要根据搜索查询中的条件信息发生。在那里,我似乎无法让这些LIKE陈述发挥作用。

在数据库中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}";
4

3 回答 3

1

除了您的查询有明显的“Bobby Tables”问题外,手头的问题是您没有在AND. 这会产生如下所示的查询:

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

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

您应该考虑对查询进行参数化,并以忽略已设置为的参数的方式对其进行修改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)
...
)

无论实际设置的参数数量如何,此修改都可以让您保持查询不变,获得相同的结果,花费几乎相同的时间。

于 2013-01-14T18:28:55.963 回答
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']}%') ";
}
于 2013-01-14T18:27:48.163 回答
1

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

min 和 max 函数适用于您想要获取数据库中字段的最小值和最大值时。

您想要的是比较标价以查看它是否介于用户提供的最小值和最大值之间。

 $sql .= " AND arc_property_res.LIST_PRICE >= '{$_GET['min-price']}' AND arc_property_res.LIST_PRICE <= '{$_GET['max-price']}'";
于 2013-01-14T18:35:03.627 回答