0

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表中的所有行更改它。

4

1 回答 1

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%', ' ', '%')
于 2012-05-29T13:54:39.197 回答