Order SQL by strongest LIKE?

后端 未结 3 706
有刺的猬
有刺的猬 2020-12-12 19:45

I have the following query:

SELECT * FROM table_name
WHERE (col_1 LIKE \'%$keyword%\'
    OR col_2 LIKE \'%$keyword%\'
    OR col_3 LIKE \'%$keyword%\')
  AN         


        
3条回答
  •  失恋的感觉
    2020-12-12 20:22

    If you mean that col_1 is more relevant than col_2 and so on, then :

    select *
          ,case when col_1 like '%$keyword%' then 1
                when col_2 like '%$keyword%' then 2
                when col_3 like '%$keyword%' then 3
           end as [priority]
      from table_name
     where col_1 like '%$keyword%'
        or col_2 like '%$keyword%'
        or col_3 like '%$keyword%'
     order by [priority]
    

    If you meant with the most column match then :

    select *
          ,(case when col_1 like '%$keyword%' then 1 else 0 end) +
          ,(case when col_2 like '%$keyword%' then 1 else 0 end) +
          ,(case when col_3 like '%$keyword%' then 1 else 0 end) as [priority]
      from table_name
     where col_1 like '%$keyword%'
        or col_2 like '%$keyword%'
        or col_3 like '%$keyword%'
     order by [priority] desc
    

提交回复
热议问题