91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

常州市| 宁安市| 正镶白旗| 临猗县| 福建省| 雷山县| 永胜县| 九龙县| 长沙县| 光泽县| 南涧| 呈贡县| 西乌珠穆沁旗| 黎城县| 东安县| 敖汉旗| 西平县| 澳门| 瑞昌市| 旬邑县| 公主岭市| 青神县| 天峻县| 鄂尔多斯市| 扶沟县| 大埔县| 乐业县| 甘洛县| 施秉县| 城口县| 六安市| 繁昌县| 甘孜| 建水县| 兴业县| 奉节县| 通化市| 扎兰屯市| 盐源县| 乾安县| 阳东县|