你好,mysql中如果是將輸出結(jié)果按照某字段排序可以寫(xiě)為:
創(chuàng)新互聯(lián)公司專注于長(zhǎng)安企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,購(gòu)物商城網(wǎng)站建設(shè)。長(zhǎng)安網(wǎng)站建設(shè)公司,為長(zhǎng)安等地區(qū)提供建站服務(wù)。全流程按需求定制制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
select *from 表名 (where 條件)order by id;這個(gè)默認(rèn)是升序,
不過(guò)你說(shuō)的按id分成幾段輸出,意思是否是需要分頁(yè),分頁(yè)的話可以寫(xiě)成:
select * from 表名 (where 條件)limit 0,3;(從0開(kāi)始,每頁(yè)3個(gè));
樓上的統(tǒng)領(lǐng)答案是正確的,原理很簡(jiǎn)單,希望樓主能夠明白。
我給個(gè)簡(jiǎn)單的給你試試看:
SELECT *, (ID-1)/2 AS ID1, (ID-1) MOD 2 AS ID2 FROM 表名字 ORDER BY ID1, ID2
原理是把ID除2的商和余數(shù)取出來(lái),先按照商進(jìn)行排序,對(duì)于商相同的兩個(gè)ID按照余數(shù)排列,例如:
ID (ID-1)/2的商 (ID-1)/2的余數(shù)
1 0 0
2 0 1
3 1 0
4 1 1
5 2 0
6 2 1
7 3 0
8 3 1
原理懂了吧,很簡(jiǎn)單吧。但是可能有的數(shù)據(jù)庫(kù)取余數(shù)的運(yùn)算不是 A MOD B,而是函數(shù)的形式MOD(A,B),你要查一下你的數(shù)據(jù)庫(kù)的手冊(cè)。
MySQL的排序,使用order by來(lái)實(shí)現(xiàn)。
order by id asc,表示用id升序排列
order by id desc,表示用id降序排列
當(dāng)需要用多個(gè)字段排序時(shí),order by cdate desc,id asc,表示先用cdate降序排列,cdate相同的再用id升序排列
在MySQL中,可以指定按照多個(gè)字段進(jìn)行排序。例如,可以使employee表按照d_id字段和age字段進(jìn)行排序。排序過(guò)程中,先按照d_id字段進(jìn)行排序,遇到d_id字段的值相等的情況時(shí),再把d_id值相等的記錄按照age字段進(jìn)行排序。
查詢employee表中的所有記錄,按照d_id字段的降序方式和age字段的升序方式進(jìn)行排序。
MySQL中排序輸出需要用order by。
如圖,test表中有如下數(shù)據(jù):
現(xiàn)在分別要求按ID正序和倒序輸出結(jié)果。
正序:
select?*?from?test?order?by?id;
結(jié)果:
倒序:
select?*?from?test?order?by?id?desc;
結(jié)果:
前幾天工作上遇到一個(gè)問(wèn)題,在mysql數(shù)據(jù)查詢的時(shí)候,使用的是in條件,而結(jié)果需要根據(jù)in來(lái)進(jìn)行排序,當(dāng)時(shí)嘗試了幾次都沒(méi)成功,后來(lái)在度娘的幫助下,找到了解決辦法:
select * from table_name where id in (6,2,1,10,5,7..)
查詢的結(jié)果和in中的順序并不一致,也就是說(shuō)在批量查詢時(shí),mysql的查詢并不是按照in中的值得順序來(lái)查詢的。那怎么才能保證和in查詢中的順序相同呢?
查詢了資料發(fā)現(xiàn)有兩種方式可以對(duì)in查詢的結(jié)果進(jìn)行排序。一種是order by find_in_set,另外一種是order by substring_index
1、select * from table_name where id in (6,2,1,10,5,7..) order by find_in_set(id,'6,2,1,10,5,7');
2、select * from table_name where id in (6,2,1,10,5,7..)?order by substring_index('6,2,1,10,5,7',id,1);