解决一个mysql关于按文章以及评论的最早时间的排序问题

本文探讨了SQL中利用时间与评论排序的策略,并详细解释了如何通过CASE语句和GREATEST函数实现定制化的排序逻辑。同时,文中还分享了一个实际问题的解决方案,即在处理时间值为NULL的情况时的应对方法。最后,通过一个具体的SQL语句实例展示了如何综合运用这些技巧,以解决特定业务需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题是:

有个文章列表要显示文章  如果文章时间发布的越近的越靠前  时间一样看评论 如果评论越近的越靠前,有点像论坛的帖子列表

抽象出来的问题就是:



按 time1,time2中较大者的顺序排列 ,要使查询结果的ID顺序为:43521


经过群里的讨论,得出以下一些答案:

SELECT * FROM `te` ORDER BY time1 DESC,time2 DESC  
######经网友提醒,此法错误,将time2的id为5的数据改为100即可看出效果######
原因:
 ORDER BY time1 DESC, time2 DESC 的意思是,先按 time1 排序,对于 time1 相同的记录再按 time2 排序。 
######



SELECT* 
FROM te
ORDER  BY CASE  WHEN time1 > time2
THEN time1
ELSE time2
END 

SELECT* , GREATEST( time1, time2 )AS time3
FROM`te` 
ORDER BY time3 DESC 

SELECT* , if( time1 > time2, time1, time2 )AS tt
FROM te
ORDERBY tt DESC 

另外,有一个网友给出了这样一个答案:

select  t.*,time1+time2 as s from t
oerder by s

我觉得虽然不是本题的答案,但是也是一种解题的思路,值得学习,这个求最大的技巧以后可以考虑别的用处

P.S.我在解决实际问题的时候又碰到了一个问题,就是如果time1,time2如果有一个为NULL的话,那个WHEN THEN ELSE的语法就不行了,后来找到了解决办法,把NULL转化为0即可,在select中把字段可能为NULL的字段进行转化一下:

select if(isnull(col),0,col) as newcol

希望对后来的人有用!

昨天晚上赶工已经把实际问题给解决了,下面来秀一下,嘿嘿,这个sql语句应该是我学sql以来写过最长的一个了:

SELECT A.aid, A.title, A.fid, A.fname, A.comments, A.posttime, 
        if( isnull( C.posttime ) , 0, C.posttime )AS C_posttime, 
C.content AS C_content 
 FROM qb_article A LEFT JOIN qb_reply R ON A.aid=R.aid 
 LEFT JOIN ( 
      SELECT aid, content, 
      MAX( posttime )AS posttime 
      FROM`qb_comment` 
      GROUP BY aid 
      ORDER BY posttime DESC 
            ) AS C ON C.aid = A.aid 
                   WHERE R.topic=1 AND A.fid=31 AND A.yz =1 
                   ORDER BY 
                   CASE 
                   WHEN A.posttime > C_posttime 
                   THEN A.posttime 
                   ELSE C_posttime 
                   END 
                   DESC LIMIT 0,20


(我的电脑上测试系统名为V7)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值