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

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

我从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)”,但找不到“霍尔斯坦的奥尔登堡”。

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

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


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

10-07 16:46