database(17)
目錄(?)
[+]
建一測試表如下:
[sql]view plain
copy
create
table
`a` (
`code` varchar
(255)
default
null
, `name
` varchar
(255)
default
null
) engine=innodb default
charset=utf8;
[sql]view plain
copy
insert
into
a values
('中一'
, '我'
);
insert
into
a values
('中二'
, '你'
);
insert
into
a values
('高一'
, '我是'
);
insert
into
a values
('高二'
, '我們'
);
insert
into
a values
('高二'
, '我的'
);
測試語句如下:
[sql]view plain
copy
-- hex(): 獲取16進製制位元組碼
select
name
, hex(
name
) from
a order
byname
desc
結果如下:
name
hex(name)
我的e68891e79a84
我是e68891e698af
我們e68891e4bbac
我e68891
你e4bda0
很明顯,mysql中的排序,是以位元組碼進行排序的,當第乙個字相同的時候,比較第二個字的位元組碼, 一次類推
有比較,才有想法,有比較才有進步,因此我們先把單字段的降序排序結果列出來,然後在看看兩個欄位的降序排序氣礦,我們就可以從中分析出其中道理來。
[sql]view plain
copy
-- 按照name進行降序排序
select
* from
a order
byname
desc
; -- 按照code進行降序排序
select
* from
a order
bycode
desc
;
左邊是order by name desc, 右邊是order by code desc的結果
code
name
高二我的
高一我是
高二我們中一我
中二你code
name
高二我們
高二我的
高一我是中二你
中一我
結果很明顯:單一字段排序的時候,其他字段出現的順序是自然排序的。
下面我們看看多字段的排序
[sql]view plain
copy
-- 按照code, name進行降序排序
select
* from
a order
bycode,
name
desc
;
code
name中一我
中二你高一我是
高二我的
高二我們
結果如下:首先謝謝qq_27837327和mjaytang
的,本人在這裡一次測試, 原文說這個sql排序無效的說法是錯誤的。實際上說order by code,name desc等同於order by code asc, name desc
經測試發現,select * from a order by code and name desc 排序效果依然無效。
我們在看看下面的語句
[sql]view plain
copy
-- 按照code, name進行降序排序
select
* from
a order
bycode
desc
, name
desc
; -- 該語句的效果等同於下面的語句, 其中1、2分別對應的是code、name
select
code,
name
from
a order
by1
desc
, 2
desc
;
code
name
高二我的
高二我們
高一我是中二你
中一我對比code,name的單個字段降序排序,我們可以發現, 使用 order by code desc, name desc的時候,mysql會先以code進行降序排序,在code進行降序排序該基礎上,再使用name進行降序排序。
另外我們還可以使用contat函式把多個字段拼接起來,在進行排序。但是要保證字段不能為null。下面我們來看一下concat的sql語句和結果。
[sql]view plain
copy
select
* from
a order
byconcat(code,
name
) desc
code
name
高二我的
高二我們
高一我是中二你
中一我很明顯,在這個測試例子上來看, order by concat(code, name) desc的效果等同於 order by code desc, name desc
mysql order by多個字段
mysql order by 多欄位排序 mysql單個字段降序排序 select from table order by id desc mysql單個字段公升序排序 select from table order by id asc mysql多個字段排序 select from table o...
mysql order by多個字段排序
mysql order by 多個字段 排序規則 比如 如要根據configid和marketid來排序 有如下語句 select from table order by configid,marketid desc 那麼結果 分析 其實這個語句等同於 先按照configid公升序,再按照marke...
MySql Order By 多個字段 排序規則
建一測試表如下 create table a code varchar 255 default null,name varchar 255 default null engine innodb default charset utf8 insert into a values 中一 我 insert...