我遇到了解决这个问题的问题。我有多个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}";
答案 0 :(得分: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']}%') ";
}
答案 1 :(得分:1)
除了显而易见的"Bobby Tables" issue that your query has之外,当前的问题是您不会在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)
...
)
无论实际设置的参数数量如何,此修改都可以使查询保持相同,从而获得相同的结果,几乎同时进行。
答案 2 :(得分: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']}'";