1

这可能是一件非常容易的事情。我正在构建一个搜索工具。我有一个包含地址的 varchar 字段。例子:

2343 S Cherry Creek St.

所以我希望能够搜索部分或全部字段。我努力了

LIKE '%$address%' 

但是当最终用户输入

"2343 S Cherry" 

它不返回任何结果。当用户只输入一个单词时,它会起作用:

"2343" 

它返回正确的记录。所以这让我认为这是不允许它搜索整个术语的空间。

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

4

4 回答 4

1

我的导入出错了。因此,正在导入数据库的地址正在添加和额外的空间。因此,当人们在单词之间使用一个空格进行搜索时,它会返回 0 个结果,因为数据库中的数据有两个空格。我已经修复了我的导入脚本,它现在可以工作了。谢谢你。

于 2012-07-28T16:14:49.070 回答
1

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

看看这个SQLFiddle 演示


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

您要做的是消除 PHP 中的引号,然后将输入插入 SQL 语句或作为绑定参数:

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

这将从您的字符串中删除单引号和双引号。

于 2012-07-28T17:28:31.497 回答
0

尝试这个

$arr = explode(' ', $address);
if (count($arr)) {
    $query = "SELECT address FROM table WHERE address LIKE '%" . implode( "%' OR address LIKE '%", $arr) . "%' ";
}
于 2012-07-28T16:02:17.323 回答
0

我建议以下

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

这将用非空格替换空格,以便您可以更接近和更轻松地匹配。

于 2012-07-28T16:04:45.163 回答