MySQL多条件排序以及选取某一条的上下语句

今天朋友问了个很有趣的问题
如何在主要排序条件是时间,次要排序条件是id的情况下,得知某一条数据id,获取他的上一条,或者下一条。
一开始看到这个问题,我的头脑是很不清醒的,不太理解他的意思,我相信大多数的人,也不太懂意思。
那么只好分条来看,首先是排序条件,第一条件,按照时间顺序,第二条件按照id顺序,这个好解决


Select * from table Order by timedata ASC id ASC

搜出来的就是table表内的按照优先按照timedata升序,如果timedata相同的情况下,对id进行升序排序。
然后,显然朋友对这个结果并不满意,他知道某一条数据的前一条和后一条,而且输入的只能有id。
那么很显然这个时候就出现分支了。先讲短的方法,我们可以根据id获取本条数据的时间,然后通过时间来这个第一项来比对一下第一项排序,然后再是id,于是就有了这种写法。(当然这个方法是我朋友自己悟出来的。。和我没啥关系)


select * from table 
    where timedata >= (select timedata from table where id = '#id') AND id >'#id' OR timedata<(select timedata from table where id = '#id')
    limit 1

第二个写法呢,就是根据第一个查询出来的排序表,自建一个自增序列,然后在取出id对应的序列号码,在从这个排序表里面,取出这个序列号的上一条或者下一条(相比于上一条的话,这个方法的适用范围更加大一点)


select * from 
(SELECT @xulienum:=@xulienum+1 AS xuhao, table.* 
FROM  table ,(SELECT @xulienum:=0)r 
ORDER BY timedata asc,id asc) tb
where xuhao >
(select xuhao from
(SELECT @xulienum2:=@xulienum2+1 AS xuhao, table.* 
FROM  table ,(SELECT @xulienum2:=0)r 
ORDER BY timedata asc,id asc) tb
where id = '#id')
limit 1

当然,我本身的sql成绩就不咋地。。。如果大佬有什么更好的方法,欢迎给建议,目标就是每天积累一小点,总有一天熬出头┗|`O′|┛ 嗷~~

猜你喜欢

转载自blog.csdn.net/qq_38604499/article/details/81283517