我有一个包含很多城市的数据库和两个名称相似的城市。
霍尔斯坦和奥尔登堡(奥尔登堡)的奥尔登堡
我从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 ...
。