MySQL读取数据库结果排序时按特定的条件优先排序

需求

一个帖子发布时,关联了一些商品,根据商品ID读取被关联的帖子时,按置顶帖子优先排序

商品表 tb_goods
帖子表 tb_posts
关联表 tb_relation

一般排序读取如下

select * from tb_relation r
left join tb_posts p on p.id = r.postid
left join tb_goods g on g.id = r.goodsid
where r.goodsid = 100
order by p.id

这样就可以根据帖子ID值正序或倒序排列,但无法按置顶帖子优先排序

解决方案

使用 case when 语法,格式如下

selec * from table_name order by case when 字段名 = '2'  then 0 else 1 end

具体写法是

select * from tb_relation r
left join tb_posts p on p.id = r.postid
left join tb_goods g on g.id = r.goodsid
where r.goodsid = 100
order by case when (p.istop=1 or p.isboardtop=1) then 0 else 1 end