需求 | 需求一 | 需求二 |
---|---|---|
語(yǔ)句 | ORDER BY examScore DESC | ORDER BY IF(examScore IS NULL,101,examScore) DESC |
效果 | ![]() |
![]() |
客戶(hù)如上帝,需求花里胡哨也屢見(jiàn)不鮮,就比如,要求張三李四排在最前面,其他學(xué)生按照成績(jī)從高到低進(jìn)行排序。這種情況就需要使用自定義排序了,MySQL 自帶的 FIELD 函數(shù)(返回對(duì)應(yīng)字符串的索引)可幫您實(shí)現(xiàn)。
語(yǔ)句一:
ORDER BY FIELD(studentName,‘張三',‘李四') ASC, examScore DESC;
上面語(yǔ)句運(yùn)行結(jié)果卻把張三李四排到最后了(如下左圖),順理成章的,要把張三李四編排到最前面就進(jìn)行降序排序。
語(yǔ)句二:
ORDER BY FIELD(studentName,‘李四',‘張三') DESC, examScore DESC;
結(jié)果果然正中下懷(如下右圖)。
語(yǔ)句 | 語(yǔ)句一 | 語(yǔ)句二 |
---|---|---|
效果 | ![]() |
![]() |
后來(lái)發(fā)現(xiàn) FIND_IN_SET 函數(shù)也能實(shí)現(xiàn),而且使用100萬(wàn)條數(shù)據(jù)測(cè)試,F(xiàn)IND_IN_SET 性能更優(yōu)。
ORDER BY FIND_IN_SET(studentName,‘李四,張三') DESC, examScore DESC;
有些朋友就奇怪了,漢字排序直接使用普通的 ORDER BY 字段 ASC
輕松完事啦,為什么說(shuō)鮮為人知呢。
其實(shí),用戶(hù)創(chuàng)建表字段使用 GBK 字符集時(shí),直接使用ORDER BY 字段 ASC
可以迎刃而解,有些用戶(hù)為了防止亂碼,使用了 utf8 字符集,簡(jiǎn)單的排序語(yǔ)句就無(wú)能為力了(如下左圖),因此在排序時(shí)把字段轉(zhuǎn)換為 GBK 就OK了(如下右圖)。
語(yǔ)句 | ORDER BY studentName ASC | ORDER BY CONVERT(studentName USING GBK) ASC |
---|---|---|
效果 | ![]() |
![]() |
到此這篇關(guān)于MySQL中一些鮮為人知的排序方式的文章就介紹到這了,更多相關(guān)MySQL排序方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:甘南 吉林 資陽(yáng) 滄州 黑河 錦州 荊州 隨州
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL中一些鮮為人知的排序方式》,本文關(guān)鍵詞 MySQL,中,一些,鮮為人知,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。