如何组合两列然后进行准全文搜索?

时间:2012-05-29 13:44:25

标签: mysql full-text-search concat-ws

的MySQL

表:城市

+----+----------+
| id |   city   |
+----+----------+
| 1  | New York |
+----+----------+

表:电台

+----+--------------+---------+
| id |     name     | city_id |
+----+--------------+---------+
| 1  |   Woodlawn   |    1    |
+----+--------------+---------+
| 2  | Mosholu Pkwy |    1    |
+----+--------------+---------+

PHP

$string = mysql_real_escape_string('woodlawn new york');

$a = mysql_query("

    SELECT s.id FROM cities AS c, stations AS s 

    WHERE CONCAT_WS(' ', s.name, c.city) LIKE '%$string%' AND c.id = s.city_id

");

while($b = mysql_fetch_assoc($a))
{
   echo $b['id'];
}

问题

但是,当我尝试搜索时,上面的示例工作正常:

 $string = mysql_real_escape_string('mosholu new york');

我得到0结果,除非我明确搜索 mosholu pkwy new york

可能的选择?

显然,我无法将FULLTEXT搜索与CONCAT_WS结合使用。而且我也非常希望保持表格的结构不变,为cities设置一个表,为stations设置一个表。

那么,是唯一一个向stations表添加第四列的选项,其中包含电台名称和城市名称,然后对其进行FULLTEXT搜索吗?

但是如果我必须更新城市名称然后更改stations表中的所有行,那么它只会是一个痛苦的屁股。

1 个答案:

答案 0 :(得分:1)

只需用$string通配符替换%中的空格 - 您可以根据需要在PHP或MySQL中执行此操作;例如,在MySQL中:

SELECT s.id
FROM   cities AS c JOIN stations AS s ON c.id = s.city_id
WHERE  CONCAT_WS(' ', s.name, c.city) LIKE REPLACE('%$string%', ' ', '%')