【发布时间】:2012-02-17 23:29:57
【问题描述】:
MySQL
+----+-------------------+----------+--------------+
| id | address | city | state |
+----+-------------------+----------+--------------+
| 1 | 13000 highway 244 | keystone | south dakota |
+----+-------------------+----------+--------------+
(顺便说一句,为了方便起见,我省略了一些列)
PHP
$string = mysql_real_escape_string('13000 highway 244 south dakota');
$a = mysql_query("
SELECT * FROM `table` WHERE
CONCAT_WS(' ', `address`, `city`, `state`) LIKE '%$string%'
");
上面的搜索查询没有返回任何结果,只有下面的values 可以工作:
- 13000 高速公路 244 基石南达科他州
- 13000国道244路基石
- 基石南达科他州
但是,我还想让以下values 工作:
- 13000 高速公路 244 南达科他州
- 13000公路基石
- 南达科他州公路基石
- 等
不依赖full-text search,这是否可能?
【问题讨论】:
-
对此的解决方案将是一个相当密集的关键字搜索,它不依赖于在另一个字符串中查找一个字符串的存在。您最好的两个解决方案是使用多个输入来基于每个字段进行搜索,或者使用文本区域并使用换行符 (
\n) 作为每个信息块的分隔符,例如。$string = explode(PHP_EOL, $textarea);为什么?因为CONCAT_WS不适合应该是简单的查询。