我正在尝试在一个文本字段中搜索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”或其他东西,并让它拉结果。有关如何做到这一点的任何想法?谢谢。
答案 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 %?%