【问题标题】:LIKE wildcard with multiple fields and spaces in MYSQLMYSQL中具有多个字段和空格的LIKE通配符
【发布时间】:2011-10-31 01:21:58
【问题描述】:

我在两个字段中搜索任何类似的匹配项时遇到了一些问题。 例如,我有一个包含值的表:

CAR MAKE   CAR MODEL
Ford       Mustang (Shelby)
Toyota     Corolla
Seat       Leon

etc etc.

我希望能够通过搜索以下任意组合来获得结果“Ford, Mustang (Shelby)”:

  • 福特

  • 野马

  • 谢尔比

  • 福特野马

    或任何其他组合。

这可能吗? 我进行了很好的搜索,但很难找到描述我的意思的搜索词。

【问题讨论】:

    标签: mysql sql search sql-like


    【解决方案1】:

    将您的术语拆分为空格,然后为每个术语构建一点 SQL,如下所示:

    car_make like '%x%' or car_model like '%x%'
    

    然后加入所有or 以获得您的 WHERE 子句。所以对于“Shelby Ford”,你最终会得到这样的 SQL:

    select stuff
    from cars
    where car_make like '%Shelby%'
       or car_model like '%Shelby%'
       or car_make like '%Ford%'
       or car_model like '%Ford%'
    

    如果您需要更复杂的东西,请研究 MySQL 的 full-text search 功能。

    【讨论】:

    • 它看起来比这更复杂,但我认为你对全文搜索是正确的,我没有调查过。感谢您花时间帮助我。
    【解决方案2】:

    试试这个:

    SELECT Car_Make, Car_Model, CONCAT_WS(' ', Car_Make, Car_Model) as Make_Model 
    FROM cars 
    WHERE CONCAT_WS(' ', Car_Make, Car_Model) LIKE '%Ford Mustang%'
    

    不确定确切的语法,因为我不在家,但类似的东西应该可以。

    另请参阅:Using mysql concat() in WHERE clause?

    【讨论】:

    • 谢谢,快速尝试,但没有成功。有机会我会仔细看看
    猜你喜欢
    • 1970-01-01
    • 2011-03-09
    • 2013-02-08
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    相关资源
    最近更新 更多