【问题标题】:mysql query filter LIKE not working properlymysql 查询过滤器 LIKE 无法正常工作
【发布时间】:2019-10-03 11:00:27
【问题描述】:

我有一列campaign_name,用户可能会键入并查找增加敏感字符串关键字。例如,他们输入了"adopt a patient"。但是在我的桌子里面campaign_name:我有"adopt-a-patient"

+----------------
|campaign_name  |
+----------------
|adopt-a-patient|
-----------------
select * from campaign where campaign_name LIKE '%adopt a patient%';
return ZERO result

我的campaign_name 排序规则已设置为utf8_general_ci。但是,如果用户准确输入了单词"adopt-a-patient",结果将按预期返回。

任何帮助将不胜感激。无论如何,我正在django 应用程序上实现它。我只是在 HeidiSQL 内部调试它。

【问题讨论】:

  • 它不会将'ADOPT A PATIENT' 中的空格转换为连字符adopt-a-patient。
  • 全文搜索可以提供更大的灵活性来处理相同值的可变用户输入。

标签: python mysql sql django


【解决方案1】:

也许用'%' 替换空格会做你想做的事:

where campaign_name like concat('%', replace('ADOPT A PATIENT', ' ', '%'), '%')

注意:这允许任何长度的字符串。如果您只想允许一个字符,请改用'_':

where campaign_name like concat('%', replace('ADOPT A PATIENT', ' ', '_'), '%')

【讨论】:

  • 你知道如何将它与我的 django 应用程序集成吗?
【解决方案2】:

在两者之间使用% 以获得完美的结果

select * from campaign where campaign_name LIKE '%adopt%a%patient%';

【讨论】:

    【解决方案3】:

    您在搜索过滤器中有三个词:“ADOPT”、“A”、“CAMPAIGN”。 您可能想做以下两件事之一:

    1) 搜索至少匹配一个单词的所有行

    SELECT * FROM campaign 
    WHERE (campaign_name LIKE '%adopt%') OR (campaign_name LIKE '%a%')
    OR (campaign_name LIKE '%patient%);
    

    (最好只考虑长度超过 2 个字符的单词)

    2) 搜索匹配所有三个单词的所有行:

    SELECT * FROM campaign 
    WHERE (campaign_name LIKE '%adopt%') AND (campaign_name LIKE '%a%')
    AND (campaign_name LIKE '%patient%);
    

    如果您希望搜索词按任意顺序
    或

    SELECT * FROM campaign WHERE (campaign_name LIKE '%adopt%a%campaigne%');
    

    如果您希望搜索的单词按照它们的书写顺序排列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 1970-01-01
      • 2016-03-06
      • 2013-11-08
      • 2015-02-14
      相关资源
      最近更新 更多