论坛:排序 >>case..when..then ..end的妙用

时间:2022-06-07 15:06:59

a.主题列表按 最后更新时间 进行排序

论坛:排序     >>case..when..then ..end的妙用

数据库SQL语句中没有if..else的判断语句,但是oracle中有decode()函数可以实现这种判断语句,但是还可以用case..when..then ..else..end,功能更加强大

但此次运用特殊字段lastUpdateTime解决,提高了效率,只用查询一张表:

论坛:排序     >>case..when..then ..end的妙用

b.主题列表排序,让所有置顶帖排在最上面,然后,让置顶帖,精华帖,普通帖按最后更新时间进行排序。

public List<Topic> getByForum(Forum forum) {
              //TODO 排序,让所有置顶帖排最上面,然后,让置顶帖,精华帖,普通帖并按最后更新时间排序。
              //FIXME 怎么排序
     return getSession().createQuery("FROM Topic t WHERE t.forum=? ORDER BY (CASE t.type WHEN 2 THEN 2 ELSE 0 END) DESC,"
                                                     +" t.lastUpdateTime DESC")
                                                    .setParameter(0,forum).list();
}

c.case 对象 when 条件1 then 结果1 .. else 其他结果 end 可以用在select/where/order by 后面

    例如:论坛:排序     >>case..when..then ..end的妙用

例如:

    论坛:排序     >>case..when..then ..end的妙用