现在有一BT需求,是排序显示的问题。
》数据库字段如下:
id   title   message_time_start   message_time_end   create_time
看着貌似没什么吧,好吧,问题来了。
》要求如下:
1、最新发布的信息(create_time)放在前面,但是这里必须是没有过期的信息(message_time_end >= create_time , 当message_time_end的数据为null时,按create_time进算。),该信息排列最前面。
2、message_time_end 为 NULL时,且create_time非今天的数据时,只取create_time距现在过期3天的信息,该信息排列中间。
3、已过期的信息( message_time_end<now() ),只取过期3天的数据,该信息排列最后面。本人黔驴技穷,请高人指点。不为您的答案,哪怕有个思路也好,虚心学习。

解决方案 »

  1.   

    贴建表及插入记录的SQL,及要求结果出来看看
    数据要有代表性
      

  2.   

    1
    select *
    from tb
    where create_time between message_time_start and (case when message_time_end is null then create_time else message_time_end   end)
    order by create_time desc;
    2
    select *
    from tb
    where create_time <>  date(now()) and message_time_end  is null and create_time>date_add(now() ,interval -3 day);
    3
    select *
    from tb
    where message_time_end<now() and message_time_end>date_add(now() ,interval -3 day);
      

  3.   

    select *
    from 数据库字段如下
    where (message_time_end>now()-interval 3 day)
    or (message_time_end is null and create_time<now + interval 3 day)
    or (message_time_end >= create_time)
    order by (message_time_end>=now() or message_time_end is null) ,  (message_time_end is null and create_time<now + interval 3 day) desc ,create_time desc
      

  4.   

    这个应该行,还有种我觉得可以根据具体的程序,用if语句来组装sql语句(这样可能比较麻烦,但是应该可以实现)