MySQL的排序,使用order by來實現(xiàn)。
創(chuàng)新互聯(lián)專業(yè)提供成都主機托管四川主機托管成都服務(wù)器托管四川服務(wù)器托管,支持按月付款!我們的承諾:貴族品質(zhì)、平民價格,機房位于中國電信/網(wǎng)通/移動機房,雅安服務(wù)器托管服務(wù)有保障!
order by id asc,表示用id升序排列
order by id desc,表示用id降序排列
當需要用多個字段排序時,order by cdate desc,id asc,表示先用cdate降序排列,cdate相同的再用id升序排列
2.1 排序方式
數(shù)據(jù)量小則在內(nèi)存排序, 數(shù)據(jù)量大則使用磁盤排序
內(nèi)存排序 : 直接使用"快速排序"
磁盤排序 : 先將數(shù)據(jù)分塊, 對每個獨立的塊使用"快速排序", 并將各個塊的排序結(jié)果存在磁盤上, 然后將各個排好序的塊進行合并(merge), 最后返回排序結(jié)果
2.2 排序算法
3. 注意點 :
ORDER BY 默認按升序排列,因此 ASC (升序)子句是可選的。
另外,還可以按降序排列,為此可以使用 DESC(降序)。
ORDER BY 子句中還可以用數(shù)字來表示對應(yīng)的列 3 對應(yīng)于 SELECT 中指定的第 3 列,即工資。
按從左到右的順序依次根據(jù) ORDER BY 子句中指定的列進行排序。
指定用于排序的列時,如果使用的是 SELECT 子句中列的數(shù)字位置,那么指定的數(shù)字不能超過 SELECT 子句中指定的列數(shù)。( 不能超出索引 )
通常,可以按 SELECT 子句中未指定的列進行排序,但必須指定列名。然而,如果在查詢中使用了GROUP BY 或 DISTINCT 子句,就不能按SELECT 子句中未指定的列進行排序。
要求:顯示部門編號為 10 的員工的姓名、職位和薪水,并根據(jù)薪水按從低到高的順序排列想獲得上面這樣的數(shù)據(jù)結(jié)果
如果想對表中多個字段進行不同的排列如工資表按照升序排列,年齡按照降序排列
可以再ORDER之后用逗號隔開不同排列的字段
1、單列排序
SELECT * FROM test1 ORDER BY date_time
默認升序,降序后面接"DESC"即可。
2、多列排序?
SELECT * FROM test1 ORDER BY `status`, date_time DESC
首先按`status`字段排序,若`status`相等,則按data_time排序。
3、自定義排序
SELECT * FROM test1 ORDER BY FIELD(`status`, 3, 2, 4, 1, 5), date_time DESC
使用"FIELD()"函數(shù),可指定順序。
4、其他條件排序
先按大于等于當前時間升序,再按小于當前時間降序,支持分頁。
SELECT * FROM test1 ORDER BY date_time NOW(), IF(date_time NOW(), 0, date_time), date_time DESC
附加SQL腳本:
CREATE?TABLE?`test1`?(
`id`?bigint(20)?NOT?NULL?AUTO_INCREMENT,
`name`?varchar(50)?NOT?NULL,
`date_time`?datetime?NOT?NULL,
`status`?int(5)?NOT?NULL,
PRIMARY?KEY?(`id`)
)?ENGINE=InnoDB?AUTO_INCREMENT=1?DEFAULT?CHARSET=utf8
INSERT?INTO?`test1`?VALUES
(NULL,?'測試1',?'2018-03-05?11:09:00',?1),(NULL,?'測試2',?'2018-03-06?11:09:00',?1),(NULL,?'abc',?'2018-03-07?11:09:00',?1),?
(NULL,?'def',?'2018-04-08?11:09:00',?2),(NULL,?'李某某',?'2018-04-17?11:09:00',?1),(NULL,?'飯某某',?'2018-04-20?13:09:00',?2),
(NULL,?'趙',?'2018-04-20?01:09:00',?4),(NULL,?'倩',?'2018-04-28?11:09:00',?2),(NULL,?'andy',?'2018-04-30?11:09:00',?1),
(NULL,?'tony',?'2018-05-08?11:09:00',?4),(NULL,?'tom',?'2018-05-07?11:09:00',?3),(NULL,?'bill',?'2018-05-18?11:09:00',?3),
(NULL,?'james',?'2018-06-07?11:09:00',?4),(NULL,?'anthony',?'2018-06-18?11:09:00',?2),(NULL,?'蓋茨',?'2018-04-21?11:09:00',?1),
(NULL,?'部長',?'2018-04-24?11:09:00',?4),(NULL,?'李總',?'2018-04-20?11:09:00',?5),(NULL,?'張總',?'2018-04-29?11:09:00',?2),
(NULL,?'王總',?'2018-04-19?11:09:00',?3),(NULL,?'唐總',?'2018-05-01?11:09:00',?2);
參考的這篇文檔Mysql排序方式
select 的時候進行一下排序就可以了,select * from 表名 order by catId asc或desc
asc升序排,從123456這樣的順序
desc 降序排,從大到小654321
對mysql有些什么函數(shù)我也不清楚,若oracle有decode,內(nèi)排序等可以做到,但有個通用的方法就是分別把111,222,333分為三個子查詢?nèi)缓蟛橐粋€表,附上子查詢的行id,最外一層查詢先按行id排序再按123排序就行。