【问题标题】:SELECT * FROM city WHERE city LIKE '%value% %value%';SELECT * FROM city WHERE city LIKE '%value% %value%';
【发布时间】:2016-11-04 12:38:03
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你说它有效,那么问题是什么?
  • 因为,我从来没有见过这样的数据库查询。

标签: php mysql sql mariadb


【解决方案1】:

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

你问了两次同样的事情:city 是否包含字符串 '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 ...

【讨论】:

  • 没有更好的选择吗?
  • @masud_moni:什么会“更好”?查询很简单:查找与该模式匹配的城市。您认为哪种方式“更好”?
  • 如果我有更好的选择,我早就在这里发帖了……看……你已经编辑了更新的。我只是要求学习......我不是故意伤害你。希望你理解。上帝保佑..
猜你喜欢
  • 2015-08-01
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
  • 2020-09-26
  • 2011-12-22
  • 2021-01-10
相关资源
最近更新 更多