操作MySQL數據進行記錄的隨意排序

来源:https://www.cnblogs.com/yjry-th/archive/2019/06/21/11064649.html
-Advertisement-
Play Games

說到排序,想必大家都知道MySQL中的“ORDER BY”這個關鍵詞吧,使用它可以實現查詢數據根據某一欄位(或多個欄位)的值排序,那麼如何實現數據的任意排序操作呢? 其實這裡我所說的“隨意排序”,本質上來說是一種假象,後臺SQL語句中依然使用到了ORDER BY關鍵詞,只不過我在數據表中加入了一個字 ...


說到排序,想必大家都知道MySQL中的“ORDER BY”這個關鍵詞吧,使用它可以實現查詢數據根據某一欄位(或多個欄位)的值排序,那麼如何實現數據的任意排序操作呢?

其實這裡我所說的“隨意排序”,本質上來說是一種假象,後臺SQL語句中依然使用到了ORDER BY關鍵詞,只不過我在數據表中加入了一個欄位標記序號,前臺中所謂的“排序”操作實際是對記錄的排序號進行交換操作而已,如下圖所示:

例如有如下數據顯示:

js實現部分代碼:

 1     function moveTop(id) {//上移
 2         $.ajax({
 3             url: '',//請求介面
 4             type: 'POST',
 5             data: {id: id},//需要上移的記錄主鍵
 6             dataType: 'json',
 7             success: function (data) {//成功返回data
 8                 if (data.success) {
 9                     showMsg("上移成功");
10                     setTimeout(function () {
11                         query();
12                     }, 1000);
13                 } else if (data.message) {
14                     showNote(data.message);
15                 } else {
16                     showNote("上移失敗");
17                 }
18             },
19             error: function () {
20                 showNote("上移失敗");
21             }
22         });
23     }
24 
25     function moveDown(id) {//下移
26         $.ajax({
27             url: '',
28             type: 'POST',
29             data: {id: id},
30             dataType: 'json',
31             success: function (data) {
32                 if (data.success) {
33                     showMsg("下移成功");
34                     setTimeout(function () {
35                         query();
36                     }, 1000);
37                 } else if (data.message) {
38                     showNote(data.message);
39                 } else {
40                     showNote("下移失敗");
41                 }
42             },
43             error: function () {
44                 showNote("下移失敗");
45             }
46         });
47     }
48 
49     function moveByShowSort(id) {//根據指定的顯示序號進行移動 註意:這裡的序號和MySQL中記錄的序號沒有關係,只是頁面上顯示的序號
50         var $showSort = $("#showSort" + id);//獲取想要移動到的記錄顯示序號
51         var showSort = Number($showSort.val().trim());
52         var total = '${pageInfo.total}';//獲取記錄總數
53         if (showSort.length === 0) {
54             showNote("請輸入序號");
55             return;
56         } else {
57             if (isNaN(showSort)) {
58                 showNote("請輸入數字");
59                 return;
60             }
61             if (showSort <= 0 || showSort > total) {
62                 showNote("請輸入1~" + total + "之間的序號");
63                 return;
64             }
65         }
66         $.ajax({
67             url: '',
68             type: 'POST',
69             data: {id: id, showSort: showSort},
70             dataType: 'json',
71             success: function (data) {
72                 if (data.success) {
73                     showMsg("移動成功");
74                     setTimeout(function () {
75                         query();
76                     }, 1000);
77                 } else if (data.message) {
78                     showNote(data.message);
79                 } else {
80                     showNote("移動失敗");
81                 }
82             },
83             error: function () {
84                 showNote("移動失敗");
85             }
86         });
87     }

後臺則根據獲取到的id查詢對應需要交換的記錄id,再根據id查詢sort排序號,最後二者交換即可。

SQL語句如下(使用mybatis編寫):

查詢被上移交換的記錄id:
<select id="getTopBannerIdById" resultType="string">
        SELECT id
        FROM b_banner
        WHERE sort &lt; (SELECT sort FROM `b_banner` WHERE id = #{id})
        ORDER BY sort DESC
        LIMIT 1
    </select>

查詢被下移交換的記錄id:
<select id="getDownBannerIdById" resultType="string">
        SELECT id
        FROM b_banner
        WHERE sort &gt; (SELECT sort FROM `b_banner` WHERE id = #{id})
        ORDER BY sort
        LIMIT 1
    </select>

查詢被交換的記錄id,攜帶輸入的顯示序號參數
<select id="getBannerIdByShowSort" resultType="java.lang.String">
        SELECT id
        FROM b_banner
        ORDER BY sort
        LIMIT #{showSort}, 1
    </select>

改變排序號就是根據id和sort進行記錄的更新操作。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • SQL Server 環境搭建 說明:本文是sqlServer的安裝和測試環境的搭建 版本是SQLServer 2005版,由於該版本只能在Windows7或者更低的系統上才能安裝,更高的系統請安裝SQLServer 2014版本,這兩個版本是我比較喜歡的版本。 測試環境選用的是將是oracle數據 ...
  • 問題:有時已有項目要移植,例如原來在廣州地區使用的某系統,突然說惠州那邊也要用這套一樣的系統。或者,在demo環境下弄了一些測試數據。然後要清空全部表數據。如果表比較多的話,逐個表手工編寫腳本就太麻煩了。 解決方案:使用系統存儲過程sp_MSforeachtable結合truncate table語 ...
  • SQL Server 2017 的各版本和支持的功能 https://docs.microsoft.com/zh-cn/sql/sql-server/editions-and-components-of-sql-server-2017?view=sqlallproducts-allversions ...
  • MySql資料庫是比較常用的關係型資料庫,操作用的是sql語句,下麵來說一說MySql的一些基本操作 MySql資料庫是一種C/S型的模式,即客戶端/伺服器端,對應到具體應用上,便是bin目錄下的mysql.exe和mysqld.exe,mysql是客戶端,mysqld是伺服器端。 所以先要啟動my ...
  • MySQL記錄操作 概覽 MySQL數據操作: DML 在MySQL管理軟體中,可以通過SQL語句中的DML語言來實現數據的操作,包括 1. 使用INSERT實現數據的插入 2. UPDATE實現數據的更新 3. 使用DELETE實現數據的刪除 4. 使用SELECT查詢數據以及。 插入數據inse ...
  • 1. 從https://github.com/neo4j-contrib/neo4j-graph-algorithms/releases下載相應版本jar包,放到 C:\Users\Administrator\.Neo4jDesktop\neo4jDatabases\database-資料庫ID\i ...
  • 在下麵這篇《獲取字元串結尾的電話號碼(案例)》https://www.cnblogs.com/insus/p/11064685.html中,仞僅中截取電話號碼,如果想獲取字元串開始的地址呢? 可以寫另外一個函數: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ...
  • 問題來自: 以下是Insus.NET的解決方法,僅是截取字元串結尾的電話號碼即可,寫一個簡的自定義函數: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- -- Author: Insus.NET -- Blog: https://insus.c ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...