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

时间:2016-11-04 12:38:04

标签: php mysql sql mariadb

我有一个拥有大量城市的数据库和两个名称相似的城市。

荷尔斯泰因奥尔登堡奥尔登堡(奥尔登堡)

我从网址

获得了一个城市

示例网址:

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

声明工作!我得到奥尔登堡(奥登堡) 我的问题是,我可以使用此声明吗?

1 个答案:

答案 0 :(得分:2)

使用

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

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

使用

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

您正在寻找一个包含' oldenburg'之后在某个时刻出现了空白,然后又在某个时刻再次出现了“奥登堡”这个词。所以是的,这就是你想要的。你会发现奥尔登堡(奥尔登堡),而不是霍尔斯坦的奥尔登堡'

当您从城市名称的部分用-分隔的网址中获取城市名称时,将会是:

SELECT city FROM citynames WHERE city LIKE CONCAT('%', REPLACE(url, '-', '%'), '%');
BTW:显然你使用的是不区分大小写的排序规则。否则,您必须使用LIKE '%Oldenburg% %Oldenburg%'才能找到奥尔登堡(奥登堡)'或WHERE LOWER(city) LIKE ...