2012-07-28 86 views
1

这可能非常简单。我正在构建一个搜索工具。我有一个保存地址的varchar字段。例如:PHP MySQL - 带空格的搜索字段

2343 S Cherry Creek St. 

所以我想能够搜索部分或全部的领域。我曾尝试

LIKE '%$address%' 

但当

"2343 S Cherry" 

末利用类型,它返回任何结果。当用户只输入一个单词时:

"2343" 

它返回正确的记录。所以这让我觉得这是关于不允许搜索整个术语的空间的东西。

有人可以告诉我如何建立这个,以便最终用户可以用多个单词搜索地址字段。我知道它与使用LIKE,%%有关,但我需要它来允许空格。

+0

我简直无法相信'LIKE %%'不适合你! – verisimilitude 2012-07-28 16:01:17

回答

0

试试这个

$arr = explode(' ', $address); 
if (count($arr)) { 
    $query = "SELECT address FROM table WHERE address LIKE '%" . implode("%' OR address LIKE '%", $arr) . "%' "; 
} 
0

我建议以下

SELECT * FROM table WHERE REPLACE(address, ' ', '') LIKE REPLACE('%$address%', ' ', ''); 

这将取代与非空间的空间,所以你可以匹配更紧密,更容易。

1

我在导入时出错。所以被导入到数据库的地址是增加了额外的空间。因此,当人们在单词之间搜索一个空格时,它返回0结果,因为db中的数据有两个空格。我已经修复了我的导入脚本,现在它正在工作。谢谢。

1

问题不在于空格,而在于如何通过PHP插入用户输入。

看看这个SQLFiddle Demo


也许问题是,你似乎允许用户在输入中输入引号,以便他们可以在整个字符串上执行搜索。

你想要做的是消除在PHP的报价,然后插入您的输入到SQL语句或作为绑定参数:

$address = strtr($address, array('"' => '', "'" => '')); 

这将删除单,并从你的字符串双引号。