在一个文本字段中搜索city,state和zip

时间:2011-09-17 02:50:40

标签: php mysql

我正在尝试在一个文本字段中搜索city,state和zip。

<form action="" method="post">
   <input type="text" name="search_loc" />
   <input type="text" name="search_sty" />
   <input type="submit" value="search" />
</form>

$query = "SELECT
       name, street, city, state, zip_code, phone_number, style, description, time
      FROM sesh
      WHERE city
      LIKE '%$search_loc%'
      OR state
      LIKE '%$search_loc%'
      OR zip_code
      LIKE '%$search_loc%'
      AND style LIKE '%$search_sty%'
      ";

这一次适用于一种类型。所以,我可以通过它自己搜索状态。我希望能够输入:“芝加哥,IL 60493”或其他东西,并让它拉结果。有关如何做到这一点的任何想法?谢谢。

3 个答案:

答案 0 :(得分:0)

选项1将在空格(“芝加哥”,“IL”,“60493”)上拆分输入的搜索词(“Chicago,IL 60493”),然后执行您已经为之制作的相同搜索操作每个部分(可能在剥离任何标点符号后)。

或者,可能更有效,你可以看看使用MySQL的全文搜索。查看本教程Using MySQL Full-text Searching以获取有关如何使用它的一些指示。

答案 1 :(得分:0)

这应该有效:

  $query = "SELECT name, street, city, state, zip_code, phone_number, style, description, time
            FROM sesh
            WHERE '$search_loc' like concat('%', city, '%', state, '%', zip_code, '%')
            AND style LIKE '%$search_sty%'";

确保逃避$ search_loc和$ search_sty以避免潜在的sqli攻击。

答案 2 :(得分:0)

您可以将要搜索的列连接到结果集中的“虚拟”列,然后将搜索项与该连接进行比较,如下所示:

 SELECT * FROM sesh WHERE CONCAT(city, ', ', state, ' ', zip_code) = ?

假设匹配必须准确。如果人们可以输入,例如“Chicago,IL”或“IL 60493”,那么你可以恢复为LIKE:

 SELECT * FROM sesh WHERE CONCAT(city, ', ', state, ' ', zip_code) LIKE %?%

(其中?代表查询的参数)。

在这些示例中,用户的标点符号必须与您的标点符号完全匹配(城市后跟命令和一个空格,状态后跟一个空格)。但是如果你想进一步使用它,请从用户输入的项目中删除所有空格和标点符号并执行:

 SELECT * FROM sesh WHERE CONCAT(city, state, zip_code) LIKE %?%