【问题标题】:MySQL search string begins with string first, but also return any results that contain stringMySQL 搜索字符串首先以字符串开头,但也返回任何包含字符串的结果
【发布时间】:2014-10-15 15:24:16
【问题描述】:

我想在列中搜索一个值,并首先返回以搜索开头的值,然后返回包含它的任何值。

例如: 搜索:约翰 约翰·多伊 约翰库克 强尼苹果籽 比尔·约翰逊 特德约翰逊 约翰逊一家

现在最简单的方法似乎是查询“WHERE Name LIKE 'john%'”,然后再次查询 WHERE Name LIKE '%john%',然后合并结果。不过,似乎有一种方法可以在一个查询中执行此操作。有什么帮助吗?

【问题讨论】:

    标签: mysql string search wildcard


    【解决方案1】:

    为什么不在你的字符串两边使用一个简单的通配符,而是从你提供的字符串开始排序你的结果

    select * from t where col like '%john%' order by  col like 'john%' desc
    

    order by col like 'john%' desc 将返回布尔值 0/1,因此以 john 开头的记录将首先显示,然后将返回其他匹配的记录

    【讨论】:

      【解决方案2】:

      你可以像这样做一个有条件的订单

      SELECT * 
      FROM table 
      WHERE Name LIKE '%john%'
      ORDER BY 
          CASE WHEN Name LIKE "john%" THEN 1 
               WHEN Name LIKE "%john%" THEN 2
               WHEN Name LIKE "%john" THEN 3 -- # -- you can add more conditions like so
               ELSE 4
          END
      

      DEMO

      【讨论】:

        猜你喜欢
        • 2011-05-25
        • 2020-05-24
        • 2016-11-20
        • 1970-01-01
        • 2020-05-05
        • 1970-01-01
        • 2019-07-08
        • 1970-01-01
        • 2021-06-12
        相关资源
        最近更新 更多