gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 14:26:47 25 4
gpt4 key购买 nike

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');

除非我明确搜索 mosholu pkwy new york,否则我会得到 0 个结果。

可能的选择?

显然,我无法将 FULLTEXT 搜索与 CONCAT_WS 结合使用。而且我也很想保持表格的结构不变,一张表用于城市,一张表用于车站

因此,这是向 stations 表添加第四列的唯一选择,其中包括车站名称和城市名称,然后执行FULLTEXT 搜索那个?

但是,如果我必须更新城市名称,然后还为 stations 表中的所有行进行更改,这将是一件很痛苦的事情。

最佳答案

只需将 $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%', ' ', '%')

关于mysql - 如何组合两列然后进行准全文搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10800420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com