多个喜欢在同一列上,并给出满足最大值或条件的第一个优先级

时间:2015-08-31 11:27:10

标签: sql

查询是这样的:

select title from sample where
  title like '%php%' or 
  title like '%html%' or
  title like '%css%' or
  title like '%javascript%'

我想按照匹配条件的数量订购记录。

1 个答案:

答案 0 :(得分:1)

您可以通过在order by以及where中添加条件来实现此目的:

select title
from sample
where title like '%php%' or 
      title like '%html%' or
      title like '%css%' or
      title like '%javascript%'
order by ((title like '%php%') + 
          (title like '%html%') +
          (title like '%css%') +
          (title like '%javascript%')) desc;

在数值上下文(例如+)中,MySQL将布尔表达式视为整数,其中1表示true,0表示false。

对于MySQL以外的数据库,请使用case语句:

order by ((case when title like '%php%' then 1 else 0 end) + 
          (case when title like '%html%' then 1 else 0 end) +
          (case when title like '%css%' then 1 else 0 end) +
          (case when title like '%javascript%' then 1 else 0 end)) desc;