最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL實(shí)現(xiàn)字段的自定義排序的方法

 更新時(shí)間:2024年04月12日 08:59:10   作者:天空sky藍(lán)  
一般情況下,我們排序都是直接利用 order by 字段 asc/desc;但是如果要排序的字段數(shù)據(jù)格式并不能直接實(shí)現(xiàn),或者說我們需要指定的順序且沒有什么規(guī)律,簡單的order by字段就實(shí)現(xiàn)不了,所以本文給大家介紹了MySQL實(shí)現(xiàn)字段的自定義排序的方法,需要的朋友可以參考下

數(shù)據(jù)

首先有一張產(chǎn)品表

CREATE TABLE `product` (
  `product_id` varchar(50) COLLATE utf8mb4_bin NOT NULL,
  `brand_id` varchar(50) COLLATE utf8mb4_bin DEFAULT NULL,
  `brand` varchar(200) COLLATE utf8mb4_bin DEFAULT NULL,
  `product_type` varchar(3) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'S-Single Item, K-Product Kit',
  `name_en` varchar(200) COLLATE utf8mb4_bin NOT NULL,
  `name_t_ch` varchar(240) COLLATE utf8mb4_bin DEFAULT NULL,
  `name_s_ch` varchar(240) COLLATE utf8mb4_bin DEFAULT NULL,
    PRIMARY KEY (`product_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1702 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

一些數(shù)據(jù):

具體的數(shù)據(jù)可以自己插入一些測試數(shù)據(jù)進(jìn)行測試,我的數(shù)據(jù)里面已經(jīng)是有了很多各種數(shù)據(jù),包括了下面排序要求的數(shù)據(jù)了。

需求

最近遇到一個(gè)這樣一個(gè)需求,針對(duì)頁面上的展示效果需要一個(gè)特定的排序,即我想看到這些特定的產(chǎn)品id需要排在前面,然后后面按照我需要的順序進(jìn)行排序。

之前的排序順序是按照product id的升序排序的,字符串的排序。

SELECT product_id, name_t_ch FROM product p ORDER BY product_id ;

下面則是要求修改后的排序順序:

解決方案

使用代碼實(shí)現(xiàn)排序(不是很好)

因?yàn)檫@個(gè)是在頁面上有顯示,并且是有分頁,如果使用代碼排序的話,則需要查出所有數(shù)據(jù)然后再手動(dòng)分頁,用不上數(shù)據(jù)庫的分頁了。

使用MySQL的排序來實(shí)現(xiàn)(推薦)

使用 order by field(column, str1,str2,str3)

格式:field(value,str1,str2,str3,str4),value與str1、str2、str3、str4比較,返回1、2、3、 4,如遇到null或者不在列表中的數(shù)據(jù)則返回0

簡單版本的一個(gè)排序:

SELECT product_id , name_t_ch FROM product p ORDER BY field(product_id, 'MR-0800004', 'MR-0800007', 'MR-0800001', 'MR-0800002') , product_id ;

結(jié)果

第一個(gè)sql版本:

-- 初始版本
SELECT product_id, name_t_ch FROM product p
ORDER BY FIELD(
  CASE 
    WHEN product_id LIKE 'MR-%' THEN 'MR'
    WHEN product_id LIKE 'SD-%' THEN 'SD'
    WHEN product_id LIKE 'WN-%' THEN 'WN'
    WHEN product_id LIKE 'HHC-%' THEN 'HHC'
    WHEN product_id LIKE 'HS-%' THEN 'HS'
    WHEN product_id LIKE 'G-%' THEN 'G'
    ELSE 'OTHER' 
  END,
  'MR', 'SD', 'WN', 'HHC', 'HS', 'G', 'OTHER', product_id
);

排序結(jié)果:

第二個(gè)sql 版本:

-- 改造版本
SELECT product_id, name_t_ch FROM product p
ORDER BY FIELD(
  CASE 
    WHEN product_id = 'MP-0800004' THEN 'MP-0800004'
    WHEN product_id = 'MP-0800007' THEN 'MP-0800007'
    WHEN product_id = 'MR-0800001' THEN 'MR-0800001'
    WHEN product_id = 'MR-0800002' THEN 'MR-0800002'
    WHEN product_id = 'MR-0800004' THEN 'MR-0800004'
    WHEN product_id = 'SD-0800001' THEN 'SD-0800001'
    WHEN product_id LIKE 'WN-%' THEN 'WN'
    WHEN product_id LIKE 'HHC-%' THEN 'HHC'
    WHEN product_id LIKE 'HS-%' THEN 'HS'
    WHEN product_id LIKE 'G-%' THEN 'G'
    ELSE 'OTHER'
  END,
  'MP-0800004', 'MP-0800007', 'MR-0800001', 'MR-0800002', 'MR-0800004',
  'SD-0800001', 'WN', 'HHC', 'HS', 'G', 'OTHER', product_id
);

結(jié)果:

能夠看到排在前面的幾個(gè) product_id 是按照我們需要的順序排序了的。

gpt解釋:在這里在 FIELD 函數(shù)中,第一個(gè)參數(shù)指定了要排序的字段或表達(dá)式,而后續(xù)的參數(shù)指定了排序的順序。在您提供的查詢中,CASE WHEN 表達(dá)式返回的結(jié)果是字符串,這些字符串用于指定排序順序。因此,product_id 不能直接寫在 FIELD 函數(shù)的第一個(gè)參數(shù)中。

使用case when 轉(zhuǎn)換實(shí)現(xiàn)自定義排序

SELECT product_id , name_t_ch FROM product p
ORDER BY
  CASE 
    WHEN product_id LIKE 'MR-%' THEN 1
    WHEN product_id LIKE 'SD-%' THEN 2
    WHEN product_id LIKE 'WN-%' THEN 3
    WHEN product_id LIKE 'HHC-%' THEN 4
    WHEN product_id LIKE 'HS-%' THEN 5
    WHEN product_id LIKE 'G-%' THEN 6
    ELSE 7 -- 其他情況
  END,
product_id;

排序結(jié)果,按照了我們指定的順序進(jìn)行排序

這個(gè)查詢首先根據(jù) productid 是否以特定前綴開頭進(jìn)行分類,并為每個(gè)分類分配一個(gè)排序權(quán)重。然后,按照這個(gè)排序權(quán)重進(jìn)行排序。如果 productid 不以任何指定的前綴開頭,則默認(rèn)按照原始的 productid 進(jìn)行排序。

-- 如果前面還有指定的順序的話
SELECT product_id, name_t_ch FROM product p
ORDER BY 
  CASE 
    WHEN product_id = 'MP-0800004' THEN 1
    WHEN product_id = 'MP-0800007' THEN 2
    WHEN product_id = 'MR-0800001' THEN 3
    WHEN product_id = 'MR-0800002' THEN 4
    WHEN product_id = 'MR-0800004' THEN 5
    WHEN product_id = 'SD-0800001' THEN 6
    WHEN product_id LIKE 'WN-%' THEN 7
    WHEN product_id LIKE 'HHC-%' THEN 8
    WHEN product_id LIKE 'HS-%' THEN 9
    WHEN product_id LIKE 'G-%' THEN 10
    ELSE 11
  END,
product_id;

結(jié)果

從結(jié)果中可以看到已經(jīng)按照我們需要的順序排好了序。case when 的寫法更簡潔,使用這個(gè)!

小結(jié)

最后這個(gè)也可以加上分頁的效果。

SELECT product_id, name_t_ch FROM product p
ORDER BY 
  CASE 
    WHEN product_id = 'MP-0800004' THEN 1
    WHEN product_id = 'MP-0800007' THEN 2
    WHEN product_id = 'MR-0800001' THEN 3
    WHEN product_id = 'MR-0800002' THEN 4
    WHEN product_id = 'MR-0800004' THEN 5
    WHEN product_id = 'SD-0800001' THEN 6
    WHEN product_id LIKE 'WN-%' THEN 7
    WHEN product_id LIKE 'HHC-%' THEN 8
    WHEN product_id LIKE 'HS-%' THEN 9
    WHEN product_id LIKE 'G-%' THEN 10
    ELSE 11
  END,
product_id LIMIT 0, 5;

第二頁

SELECT product_id, name_t_ch FROM product p
ORDER BY 
  CASE 
    WHEN product_id = 'MP-0800004' THEN 1
    WHEN product_id = 'MP-0800007' THEN 2
    WHEN product_id = 'MR-0800001' THEN 3
    WHEN product_id = 'MR-0800002' THEN 4
    WHEN product_id = 'MR-0800004' THEN 5
    WHEN product_id = 'SD-0800001' THEN 6
    WHEN product_id LIKE 'WN-%' THEN 7
    WHEN product_id LIKE 'HHC-%' THEN 8
    WHEN product_id LIKE 'HS-%' THEN 9
    WHEN product_id LIKE 'G-%' THEN 10
    ELSE 11
  END,
product_id LIMIT 1, 5;

以上就是MySQL實(shí)現(xiàn)字段的自定義排序的方法的詳細(xì)內(nèi)容,更多關(guān)于MySQL字段自定義排序的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL最基本的命令使用匯總

    MySQL最基本的命令使用匯總

    這篇文章為大家分享了MySQL最基本的命令使用匯總,MySQL最基本的命令使用,包括如何正確連接MySQL(和PHP搭配之最佳組合),修改密碼與增加新用戶等相關(guān)內(nèi)容的描述,感興趣的小伙伴們可以參考一下
    2015-11-11
  • MySQL 多表連接查詢實(shí)戰(zhàn)指南:內(nèi)連接 + 外連接

    MySQL 多表連接查詢實(shí)戰(zhàn)指南:內(nèi)連接 + 外連接

    本文詳細(xì)介紹了MySQL中的內(nèi)連接、左外連接和右外連接的基本概念、語法和應(yīng)用場景,通過案例實(shí)戰(zhàn)展示了如何在實(shí)際開發(fā)中應(yīng)用這些連接方式,幫助讀者掌握多表查詢的核心技能,感興趣的朋友跟隨小編一起看看吧
    2026-04-04
  • mysql 5.7.13 winx64安裝配置教程

    mysql 5.7.13 winx64安裝配置教程

    這篇文章主要為大家分享了windows下mysql 5.7.13winx64安裝配置教程,總結(jié)在安裝mysql5.7時(shí)遇到的坑,感興趣的朋友可以參考一下
    2016-12-12
  • mysql 查詢重復(fù)的數(shù)據(jù)的SQL優(yōu)化方案

    mysql 查詢重復(fù)的數(shù)據(jù)的SQL優(yōu)化方案

    這篇文章主要介紹了mysql 查詢重復(fù)的數(shù)據(jù)的SQL優(yōu)化方案,非常不錯(cuò)的方案推薦給大家。
    2015-02-02
  • MySQL修改密碼方法匯總

    MySQL修改密碼方法匯總

    本文中小編給大家匯總介紹了MySQL修改密碼的方法,分為MySQL5.7版本之前以及MySQL5.7版本之后的修改方法,有需要的小伙伴可以參考下
    2018-08-08
  • 在MySQL中操作克隆表的教程

    在MySQL中操作克隆表的教程

    這篇文章主要介紹了在MySQL中操作克隆表的教程,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Linux中MySQL跳過密碼驗(yàn)證以及Bug的解決方法(圖文)

    Linux中MySQL跳過密碼驗(yàn)證以及Bug的解決方法(圖文)

    這篇文章主要介紹了Linux中MySQL跳過密碼驗(yàn)證以及Bug的解決方法,文章通過代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家解決問題有一定的幫助,需要的朋友可以參考下
    2024-09-09
  • 一文帶你搞懂MySQL的MVCC機(jī)制

    一文帶你搞懂MySQL的MVCC機(jī)制

    MySQL中的MVCC機(jī)制想必大家都有所耳聞吧,雖然在平時(shí)MySQL使用過程中基本上用不到,但是面試中出場率十分高,那么你對(duì)MVCC機(jī)制了解多少呢,MVCC機(jī)制是用來干嘛的呢,底層的工作原理是怎么樣的呢,本文就帶你一探究竟
    2023-07-07
  • MySQL定時(shí)任務(wù)EVENT事件的使用方法

    MySQL定時(shí)任務(wù)EVENT事件的使用方法

    本文主要介紹了MySQL定時(shí)任務(wù)EVENT事件的使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Mysql的MHA高可用及故障切換問題小結(jié)

    Mysql的MHA高可用及故障切換問題小結(jié)

    MHA是基于MySQL主從復(fù)制的高可用解決方案,通過自動(dòng)切換到從節(jié)點(diǎn)并提升其為新主,實(shí)現(xiàn)數(shù)據(jù)庫的高可用和故障恢復(fù),配置包括主從復(fù)制、MHA組件、VIP管理等,通過配置無密碼認(rèn)證和測試連接,可以確保MHA正常運(yùn)行,感興趣的朋友一起看看吧
    2024-12-12

最新評(píng)論

马关县| 奉化市| 观塘区| 吉木乃县| 嘉荫县| 全椒县| 邯郸县| 英吉沙县| 明水县| 蓝田县| 枣阳市| 都江堰市| 临漳县| 马公市| 山西省| 民县| 无锡市| 温宿县| 马公市| 宾阳县| 渝北区| 措美县| 太仆寺旗| 天气| 曲松县| 咸丰县| 阳春市| 布拖县| 江安县| 盐津县| 蒙自县| 土默特右旗| 通化市| 治多县| 朔州市| 吉林省| 彭州市| 太仆寺旗| 湘乡市| 乐都县| 汉寿县|