Mysql自定義順序查詢

1、使用函數

????????MySQL 的?ORDER BY FIELD()?函數可以按照指定的自定義順序對查詢結果進行排序,而不是默認的升序(ASC)或降序(DESC)。

2、適用場景

????????后端/運營人員經常需要臨時把某幾條記錄‘拽’到最前(或最后)顯示,而業務表里又沒有現成的排序字段或枚舉值。

場景類別說明示例
后臺列表“置頂/置底”運營在后臺商品、訂單、文章列表里勾選“把這幾條排在最前”。代碼里只需把勾選的 id 塞進 FIELD(),無需改表結構。ORDER BY FIELD(id, 5, 9, 12)
枚舉值按業務含義排序狀態、類型等枚舉值在界面要按非字母順序顯示(如“審核中→通過→駁回”)。ORDER BY FIELD(status,'checking','passed','rejected')
臨時活動或灰度白名單做 A/B 實驗或灰度發布時,把指定用戶/商品優先曝光,名單可能天天變,不想頻繁改表。ORDER BY FIELD(user_id, 10001, 10087, 10233)
報表/導出文件固定行列順序財務或數據組導出 Excel 時,要求列順序固定(如“北京、上海、深圳、其他”)。ORDER BY FIELD(city,'北京','上海','深圳')

不適合的場景

  • 排序規則長期穩定 → 應該直接在表里加 sort 字段并建索引,性能更好。

  • 數據量大且需要分頁 → FIELD() 無法走索引,深分頁會變慢;可改為冗余排序列或 ORDER BY CASE … WHEN … THEN 1 WHEN … THEN 2 END

3、基本語法

SELECT 列名
FROM 表名
ORDER BY FIELD(排序字段, 值1, 值2, 值3, ...);

4、示例

????????按指定狀態順序排序。假設有一個?orders?表,包含訂單狀態?status?字段,可能的值為 'pending'(待處理)、'processing'(處理中)、'shipped'(已發貨)、'delivered'(已送達)。如果想按照?'processing' → 'pending' → 'shipped' → 'delivered'?的自定義順序排序:

SELECT id, status, order_date
FROM orders
ORDER BY FIELD(status, 'processing', 'pending', 'shipped', 'delivered');

表結構和數據

--
-- Table structure for table `orders`
--DROP TABLE IF EXISTS `orders`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `orders` (`id` bigint NOT NULL AUTO_INCREMENT,`status` varchar(100) NOT NULL COMMENT '訂單狀態',`order_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `orders`
--LOCK TABLES `orders` WRITE;
/*!40000 ALTER TABLE `orders` DISABLE KEYS */;
INSERT INTO `orders` VALUES (1,'processing','2025-08-07 17:19:16'),(2,'pending','2025-08-07 17:19:16'),(3,'shipped','2025-08-07 17:19:16'),(4,'delivered','2025-08-07 17:19:16'),(5,'shipped','2025-08-07 17:19:16'),(6,'pending','2025-08-07 17:19:16'),(7,'processing','2025-08-07 17:19:16'),(8,'shipped','2025-08-07 17:19:16'),(9,'pending','2025-08-07 17:19:16'),(10,'delivered','2025-08-07 17:19:16');
/*!40000 ALTER TABLE `orders` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

查詢結果

5、注意事項

  • 性能FIELD() 無法利用索引,大數據量時可能較慢,可考慮 ORDER BY CASE 或冗余排序列加索引。
  • NULL 處理FIELD() 中若列值為 NULL,會返回 0,排序行為與不在列表中的值相同。
  • FIELD()?函數是大小寫敏感的(取決于數據庫的 collation 設置)。
  • 如果指定的值在排序字段中不存在,這些值會被忽略,不影響排序。
  • 不在指定列表中的值會被排在所有指定值的后面。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918013.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918013.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918013.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

回歸預測 | MATLAB實現RBF徑向基神經網絡多輸入單輸出回歸預測+SHAP可解釋分析

目錄 基于RBF徑向基神經網絡多輸入單輸出回歸預測及SHAP可解釋分析的研究 摘要 1. 引言 1.1 研究背景 1.2 研究意義 1.3 研究目標與內容 2. 文獻綜述 2.1 RBF徑向基神經網絡研究現狀 2.2 SHAP可解釋分析研究進展 3. RBF徑向基神經網絡原理 4. SHAP可解釋分析理論基礎 4.1 Shapl…

--- Eureka 服務注冊發現 ---

Euraka 是netfix開發的基于REST服務基于AP框架的注冊中心,主要是用于服務的注冊,管理,負載均衡,服務故障轉移 Eureka主要分倆部分Eureka Server:服務中心Server端,提供服務注冊 發現 健康檢查等服務Eureka …

vue3 el-select 加載內容后 觸發事件

在 Vue 3 中使用 Element UI 的 el-select 組件實現加載內容后觸發事件,主要有以下兩種常見需求及實現方式:加載數據后觸發事件若需在數據加載完成后觸發特定事件(如頁面渲染完成),可通過自定義指令監聽滾動容器狀態&a…

c# winform 調用 海康威視工業相機(又全又細又簡潔)

1.準備一個海康相機 從垃圾桶里翻出來一個USB口相機。 2.下載MVS 和SDK 海康機器人-機器視覺-下載中心 mvs: sdk: 用MVS 調試一下,能連接就行。 海康威視相機,MVS連接成功,但無圖像怎么辦?-CSDN博客 3.打…

前端頁面直接生成PDF下載文件

前言 因為要實現業務需求如下圖,業務邏輯,該憑證為前端代碼實現,為了簡單方便實現下載為pdf的需求。 一、怎么在前端直接生成PDF? 需求描述:瀏覽器打開的這個頁面,點擊下載,把當前彈框頁面的…

性能優化——GPU的影響

關閉MSAA 之前在查一個渲染問題,一開始是定位到了CPU在waitforFrame所以知道是GPU的問題但如何定義GPU的問題在哪里,就很麻煩。我一開始以為是drawcall的問題,因為我發現drawcall有350個但降低到30個后,依然情況沒有好轉。畢竟dra…

軟件需求關閉前的質量評估標準是什么

在 需求關閉前,進行 質量評估 是確保需求被完整實現、測試充分且滿足業務目標的關鍵步驟。以下是需求關閉前的質量評估標準,涵蓋了功能、非功能、測試覆蓋率和用戶滿意度等方面:一、功能實現的質量評估標準需求完整性:所有功能需求…

vscode中創建python虛擬環境的方法

文章目錄框架不同python解釋器vscode運行python需要的插件vscode可以改變執行python腳本的默認終端虛擬環境解釋創建虛擬環境的方法python的settings.json的一些好用配置框架 python解釋器->虛擬環境->vscode 不同python解釋器 在一臺電腦中我們可以安裝多個版本的pyt…

基于 ShardingSphere 的 Spring Boot 數據加密與模糊查詢實現

基于 ShardingSphere 的 Spring Boot 數據加密與模糊查詢實現 在數據安全與查詢便捷性并重的今天,敏感數據加密存儲后如何支持靈活查詢成為關鍵挑戰。本文將聚焦ShardingSphere 在實現數據加密的同時支持模糊查詢的核心能力,詳細介紹基于 Spring Boot 和 ShardingSphere 的完…

計算虛擬化技術

🧠 一、什么是計算虛擬化?(基礎認識) ? 基本概念: 計算虛擬化(Compute Virtualization) 是指:在一臺物理服務器上模擬多個“虛擬計算資源”,每個虛擬機看起來像是一臺獨…

Python編程基礎與實踐:Python基礎數據結構:列表、字典和集合

Python數據結構:掌握列表、字典和集合 學習目標 通過本課程的學習,學員將掌握Python中基本的數據結構:列表、字典和集合。學員將了解它們的特性、使用場景以及如何高效地使用它們來解決實際問題。 相關知識點 列表、字典和集合使用 學習…

三維偏序 -- cdq 套 cdq

似乎題解區并沒有 cdq 套 cdq 的作法,剛好今天講了,就來寫一發。 題意與記號 題目講的很清楚了。此方法并沒有樹狀數組好想也沒有其高效,但能很方便擴展。下文記原序列為 ddd,將每個點拆分成點與詢問,內部增加一個名為…

Effective C++ 條款27: 盡量用const、enum、inline替換 #define

Effective C 條款27:盡量用const、enum、inline替換#define核心思想:使用編譯器(const, enum, inline)替代預處理器(#define),讓編譯器進行語義檢查,避免宏替換引發的錯誤和調試困難…

芯谷科技--高效噪聲降低解決方案壓縮擴展器D5015

在無繩電話系統中,噪聲降低是提升通話質量的關鍵。 D5015 壓縮擴展器,通過集成壓縮器和擴展器,有效降低了傳輸噪聲,同時保持了信號的完整性。D5015 采用 SOP20 和 DIP20 封裝形式,具有低電壓工作、低功耗、高集成度等特…

LabVIEW車床靜剛度自動測

?基于LabVIEW 平臺開發車床靜剛度自動測試系統,針對傳統生產法測量中人工誤差大、計算復雜、效率低等問題,結合誤差復映規律與剛度方程,通過高精度硬件與軟件協同,實現試件加工前后尺寸的在線采集、自動計算與報告生成&#xff0…

汽車流通行業4S門店生存性指標:零服吸收率

我們在做汽車4S集團的商業智能BI數據分析項目中,對于4S店的管理,大家經常會提到一個分析指標,叫“零服吸收率”,這個大概是什么意思呢?簡單來說就是4S門店一臺車都沒有賣出的情況下,光靠售后服務部分的收益…

第一性原理科學計算服務器如何選擇配置-CPU選擇篇

一、 大多數人知道的 (顯性因素)核心數與線程數 (Core Count & Thread Count): 重要性: 核心是王道。 科學計算任務(如仿真、建模、數據分析、機器學習訓練)絕大多數都高度并行化,可以同時利用多個核心進行計算。選擇建議&…

Java 后端 + JavaScript 前端 實現按鈕級別權限控制的解決方案

Java JavaScript 前后端協同實現按鈕權限控制 在后臺管理系統中,不同用戶根據角色和數據狀態應展示不同的操作按鈕,比如編輯、刪除、審批、提交等操作。本文將介紹一種通過 Java 后端生成按鈕權限 JSON,前端通過 jQuery 解析控制按鈕顯示的…

RAG面試內容整理-18. 向量量化與索引壓縮技術(PQ, HNSW 等)

當知識庫規模達到百萬甚至數億級文檔時,向量索引的存儲和查詢效率成為關鍵瓶頸。向量量化是一類用較低比特表示近似向量的方法,大幅壓縮內存占用并加速相似度計算。PQ(Product Quantization)是其中最著名的方法之一,被Faiss等庫廣泛實現。PQ的思想是將高維向量劃分為多個子…

如何顯示一個 Elasticsearch 索引的字段

作者:來自 Elastic JD Armada 學習如何使用 _mapping 和 _search API、子字段、合成 _source 和運行時字段來顯示 Elasticsearch 索引的字段。 更多閱讀: Elasticsearch:從搜索中獲取選定的字段 fields Elasticsearch:inverted …