SELECT * FROM city WHERE city LIKE '%value% %value%';

SELECT * FROM city WHERE city LIKE '%value% %value%';

我有一个包含很多城市和两个名称相似的城市的数据库。

霍尔斯坦的奥尔登堡奥尔登堡(Oldenburg)

我从 URL

得到一个城市

示例URL:

www.example.com/cityname/oldenburg-in-holstein

www.example.com/cityname/oldenburg-oldenburg

SELECT city FROM citynames WHERE city LIKE '%oldenburg%';

我发表此声明我得到 荷尔斯泰因州的奥尔登堡

SELECT * FROM citynames WHERE city LIKE '%oldenburg%' AND LIKE '%oldenburg%'';

我又得到了荷尔斯泰因的奥尔登堡,但是如果我发表这个声明

SELECT city FROM citynames WHERE city LIKE '%oldenburg% %oldenburg%';

声明有效!我得到 奥尔登堡 (Oldenburg) 我的问题是我可以使用这个声明吗?

SELECT * FROM citynames WHERE city LIKE '%oldenburg%' AND LIKE '%oldenburg%'';

您在问同一件事两次:城市是否包含字符串 'oldenburg'。这不是你想要的。

SELECT city FROM citynames WHERE city LIKE '%oldenburg% %oldenburg%';

您正在寻找一个包含 'oldenburg' 的城市,然后在某处是一个空白,然后在某处又是单词 'oldenburg'。所以是的,这就是你想要的。您会找到 'Oldenburg (Oldenburg)',但找不到 'Oldenburg in Holstein'。

当您从 URL 中获取城市名称时,城市名称的各个部分用 - 分隔,即:

SELECT city FROM citynames WHERE city LIKE CONCAT('%', REPLACE(url, '-', '%'), '%');

顺便说一句:显然您使用的排序规则不区分大小写。否则你必须使用 LIKE '%Oldenburg% %Oldenburg%' 才能找到 'Oldenburg (Oldenburg)' 或 WHERE LOWER(city) LIKE ....