【问题标题】:How do I combine two columns and then do a quasi fulltext search?如何合并两列然后进行准全文搜索?
【发布时间】:2012-05-29 13:44:24
【问题描述】:

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 表中的所有行更改它,那只会让人头疼。

【问题讨论】:

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


    【解决方案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%', ' ', '%')
    

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 2019-08-16
      相关资源
      最近更新 更多