2

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

当我尝试搜索房产时,我的问题出现了。例如,我想搜索特定区域或邮政编码中的所有属性。当我尝试搜索地址行 1、地址行 2、邮政编码和区域(如 London 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%'
4

2 回答 2

4

它不是有效的方法,但最简单且适用于低流量页面:

SELECT property.propertyid, property.propertyname
FROM   property
WHERE  CONCAT(property.address_1, ' ',
              property.address_2, ' ',
              property.postcode, ' ',
              property.area) LIKE '%txtSearchField%'

这应该适合你。

于 2012-05-15T09:43:07.550 回答
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/>';
}
    ?>
于 2012-05-15T10:03:39.510 回答