表:城市
+----+----------+
| id | city |
+----+----------+
| 1 | New York |
+----+----------+
表:电台
+----+--------------+---------+
| id | name | city_id |
+----+--------------+---------+
| 1 | Woodlawn | 1 |
+----+--------------+---------+
| 2 | Mosholu Pkwy | 1 |
+----+--------------+---------+
$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
表中的所有行,那么它只会是一个痛苦的屁股。
答案 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%', ' ', '%')