我在互联网上搜索了许多不同的方法,但找不到我的问题的答案。我正在自学网站开发,并正在尝试创建一个在线房地产网站。
当我尝试搜索房产时,我的问题就出现了。例如,我想搜索特定区域或邮政编码中的所有属性。当我尝试搜索多个字段时,例如地址行1,地址行2,邮政编码和区域(如伦敦SW1V)。
以下是我目前正在使用的查询,并希望将其更改为我需要的方式:
SELECT property.propertyid, property.propertyname
FROM property
WHERE property.address_1 LIKE '%txtSearchField%'
OR property.address_2 LIKE '%txtSearchField%'
OR property.postcode LIKE '%txtSearchField%'
OR property.area LIKE '%txtSearchField%'
答案 0 :(得分:4)
它不是一种有效的方式,但对于低流量页面来说最简单和最好:
SELECT property.propertyid, property.propertyname
FROM property
WHERE CONCAT(property.address_1, ' ',
property.address_2, ' ',
property.postcode, ' ',
property.area) LIKE '%txtSearchField%'
这应该适合你。
答案 1 :(得分:2)
在此SQL查询构造中,无论txtSearchField
的值是什么(即使它为空),您都可以执行它。您还忘记将美元符号$放在此变量txtSearchField
的前面,这就是您无法从输入表单中获取任何结果的原因,因为您始终搜索文本txtSearchField
,而不是变量的内容$txtSearchField
。 (我猜你使用带有HTML文本输入的输入表单,称为txtSearchField
)。请记住将HTML表单的方法设置为“post”,因为如果省略它,则默认为“get”。
如果我是对的,你应该以这种方式修改你的代码:
<?php
//Sanitize user input
$txtSearchField = filter_var($_POST['txtSearchField'], FILTER_SANITIZE_STRING);
//SQL query
$query = "SELECT property.propertyid, property.propertyname
FROM property
WHERE CONCAT(property.address_1, ' ',
property.address_2, ' ',
property.postcode, ' ',
property.area) LIKE '%$txtSearchField%'" //see the $ sign here
//Finally, execute query and get result
$result = mysql_query ($query) or die ('SQL error occured: '.mysql_error());
while ($array = mysql_fetch_assoc($result)) {
echo $result['address_1'].'/'.$result['address_2'].'/'.$result['postcode'].'/'.$result['area'].'<br/>';
}
?>