亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

丰台区| 乾安县| 峡江县| 日照市| 桃源县| 阜新市| 兴仁县| 南充市| 梅河口市| 麻江县| 辽阳县| 临颍县| 洮南市| 晋城| 天门市| 什邡市| 通州市| 伊川县| 荣昌县| 科尔| 陇西县| 秦皇岛市| 天气| 齐齐哈尔市| 华容县| 许昌县| 慈溪市| 和顺县| 鄯善县| 个旧市| 宜州市| 鸡东县| 裕民县| 涟水县| 澄江县| 杭州市| 平塘县| 孙吴县| 临夏市| 沧州市| 慈溪市|