使用PHP在MySQL中搜索多个列

时间:2012-05-15 09:35:49

标签: php mysql search

我在互联网上搜索了许多不同的方法,但找不到我的问题的答案。我正在自学网站开发,并正在尝试创建一个在线房地产网站。

当我尝试搜索房产时,我的问题就出现了。例如,我想搜索特定区域或邮政编码中的所有属性。当我尝试搜索多个字段时,例如地址行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%'

2 个答案:

答案 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/>';
}
    ?>