中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中怎樣更新排序值以及存儲過程更新排序值

發布時間:2021-06-15 15:00:24 來源:億速云 閱讀:738 作者:小新 欄目:大數據

小編給大家分享一下MySQL中怎樣更新排序值以及存儲過程更新排序值,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

公司有表Task 和 Question, 

Question表大致如下

id,bigint(20)
student_id,bigint(20)
task_id,bigint(20)
name,varchar(100)
ranking,int(11) not null default 999 comment '排序 根據ranking和id一起排序'

如上所示, 當查詢時只需sql加個排序就行, order by ranking, id,  這樣新增時不用先獲取最大ranking值(或count);

現在新增需求, 此時ranking最好在增刪改時, 重新排序好(從1開始到結束), 需要將已有數據排序好:

# 先定義一個變量ranking, 在update時自增
set @ranking = 0;
update task_question set ranking = (@ranking := @ranking+1) 
where task_id = #{Task表主鍵} order by ranking, id;

但是以上sql只能更新某一個Task的數據, 我這里需要更新所有的Task, 所以寫了一個存儲過程:

# delimiter $$ ????
drop procedure if exists test;  # 如果存在名字為test的procedure則刪除
create procedure test()  # 創建(創建函數使用的關鍵字為function 函數名())
begin
    declare taskId bigint;
    declare flag int default 0;
    # 這是重點,定義一個游標來記錄sql查詢的結果(此處的知識點還有SQL的模糊查詢,見補充)
    declare taskList cursor for  select id from task;
    # 為下面while循環建立一個退出標志,當游標遍歷完后將flag的值設置為1
    declare continue handler for not found set flag=1;
    open taskList;  # 打開游標
    # 將游標中的值賦給定義好的變量,實現for循環的要點
    fetch taskList into taskId;
    while flag <> 1 do
    # 在這里設置一個局部變量 ranking
        set @ranking = 0;
        update task_question set ranking = (@ranking := @ranking+1) where task_id = taskId order by ranking, id;
        # 游標后移
        fetch taskList into taskId;
    end while;
    close taskList;  # 關閉游標
end;
# $$

# 執行存儲過程
call test();

以上是“MySQL中怎樣更新排序值以及存儲過程更新排序值”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南充市| 镇远县| 永靖县| 咸丰县| 新宾| 临沧市| 天柱县| 无锡市| 昔阳县| 陆良县| 黑河市| 深圳市| 将乐县| 寻甸| 海伦市| 南丹县| 景泰县| 南开区| 平昌县| 鄂温| 区。| 青田县| 舞阳县| 虞城县| 徐闻县| 赫章县| 大方县| 桐城市| 和龙市| 大庆市| 宝鸡市| 纳雍县| 怀宁县| 乌拉特中旗| 平顺县| 乌兰浩特市| 城口县| 丹寨县| 淳化县| 龙门县| 乐平市|