【问题标题】:get matched result with used keyword in mysql like query获取与mysql中使用的关键字匹配的结果,如查询
【发布时间】:2013-07-14 05:22:07
【问题描述】:

我正在使用带有多个关键字的OR 条件进行LIKE 搜索。我想知道是否可以获得搜索结果并为该结果使用关键字。

SELECT * FROM `LOCATIONS` WHERE `location_name` LIKE '%United Kingdom%' OR `location_name` LIKE '%France%';

查询得到的是两个关键字的匹配结果,我想得到匹配是从哪个关键字这样的!

location_name                 usedKeyword

United Kingdom UK             United Kingdom

Lille, France                 France

London, United Kingdom        United Kingdom

如果两个关键字的 location_name 匹配,我可能知道还有一个问题。我真的不知道。如何做到这一点。

例如,“英国和法国”是地点名称

你为什么要这样做?

您可能有这个问题,我尝试了所有可能的方法来获取位置国家名称。我有带有代码和名称的国家/地区列表。使用它我喜欢获取位置名称

其他几个实验

  1. reverse phrase search in zend lucene
  2. Location search query issue

PS:我知道,我可以为每个国家单独运行查询。我对城市做同样的事情意味着成千上万,为了尽量减少查询数量,我正在寻找替代方案。

【问题讨论】:

    标签: mysql search


    【解决方案1】:

    使用CASE 表达式:

    SELECT *,
           CASE WHEN location_name LIKE '%United Kingdom%'
                THEN 'United Kingdom'
                WHEN location_name LIKE '%France%'
                THEN 'France'
           END usedKeyword
    FROM `LOCATIONS`
    WHERE `location_name` LIKE '%United Kingdom%'
       OR `location_name` LIKE '%France%';
    

    另请参阅更正后的 WHERE 子句。您的 WHERE 子句将返回所有行。

    【讨论】:

    • 感谢 Barmar,您认为此查询可以处理“英国和法国”位置名称吗
    • 您可以将WHEN location_name LIKE '%United Kingdom%' AND location_name LIKE '%France%' 作为第一种情况。但是没有简单的方法可以将其推广到多种选择,因为组合会呈指数级增长。
    • 是的,我明白了,你认为,我们可以排除这个案例的搜索结果吗?
    • 使用XOR 而不是OR。如果只有一个条件为真,则为真,但不能同时为真。
    猜你喜欢
    • 2017-01-28
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多