【问题标题】:MySQL "Advanced Where" QueryMySQL“高级位置”查询
【发布时间】:2012-09-17 07:24:56
【问题描述】:

我想知道是否有任何可能的方式,让 MySQL 查询可以动态搜索 WHERE 子句中的任何内容。

例如,如果查询是

Select * 
from table 
where item = 'Dell Optiplex 390'

它应该搜索具有以下内容的行:

Dell Optiplex 390

Dell Desktop Optiplex 390

Dell Laptop Optiplex 390

Optiplex dual core 390

etc., etc.

【问题讨论】:

  • 了解FULL TEXT SEARCH
  • 您需要所有单词都出现在结果中吗?您最后的结果“Optiplex 双核 390”不符合要求。
  • 我希望它匹配一个单词,那么应该考虑该行。

标签: mysql sql advanced-search


【解决方案1】:

对于这些类型的搜索功能,我认为您正在寻找一种匹配算法。您可以使用Levenshtein Distance Algorithm,如果您使用php,则有一个实现此算法的php函数levenshtein来获取匹配数据,还有Needleman–Wunsch algorithm,如果您的数据只有英文和一个单词您可以使用Soundex Algorithm 的列。

这是一个开始,你会在 Mysql 中找到很多这些算法的实现。

【讨论】:

  • “有一个实现这个算法的php函数”-你能提供一个链接吗?
  • 非常感谢您提供这个 php 函数,它也会很有帮助,但是 MySQL 中有什么吗?
  • @RamuPL,正如我所说,这个算法在 mysql 中有很多实现。尝试用谷歌搜索。
  • @RamuPL,如果您觉得对您有帮助,请尝试accept the answer
【解决方案2】:

如果您需要知道该字段包含您的任何单词。

Select *  
from table  
where item like '%Dell%' OR item like '%Optiplex%' or item like '%390%'

【讨论】:

    【解决方案3】:

    这里有一个很好的答案已被删除,我会将那个答案修改为:

    Select * from table where 
    lower(item) like '%dell%optiplex%390%' or
    lower(item) like '%optiplex%390%' or
    lower(item) like '%dell%laptop%390%' or ...
    

    【讨论】:

    • 这是为了以防他希望所有单词都出现在结果中!
    • @Michael 当然,您可以在WHERE 子句中添加许多“喜欢”
    【解决方案4】:

    使用带有通配符的 SQL LIKE 子句:

    SELECT * 
    FROM table 
    WHERE item LIKE '%Dell%Optiplex390%';
    

    这是一个很好的参考指南:

    【讨论】:

    • @alfasin,我发帖前可能没有看到你的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 2020-02-26
    相关资源
    最近更新 更多