小編給大家分享一下MySQL中怎樣更新排序值以及存儲過程更新排序值,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)建站是一家網(wǎng)站設(shè)計公司,集創(chuàng)意、互聯(lián)網(wǎng)應(yīng)用、軟件技術(shù)為一體的創(chuàng)意網(wǎng)站建設(shè)服務(wù)商,主營產(chǎn)品:響應(yīng)式網(wǎng)站開發(fā)、成都品牌網(wǎng)站建設(shè)、成都全網(wǎng)營銷。我們專注企業(yè)品牌在網(wǎng)站中的整體樹立,網(wǎng)絡(luò)互動的體驗,以及在手機(jī)等移動端的優(yōu)質(zhì)呈現(xiàn)。成都網(wǎng)站設(shè)計、網(wǎng)站制作、移動互聯(lián)產(chǎn)品、網(wǎng)絡(luò)運(yùn)營、VI設(shè)計、云產(chǎn)品.運(yùn)維為核心業(yè)務(wù)。為用戶提供一站式解決方案,我們深知市場的競爭激烈,認(rèn)真對待每位客戶,為客戶提供賞析悅目的作品,網(wǎng)站的價值服務(wù)。
公司有表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 '排序 根據(jù)ranking和id一起排序'
如上所示, 當(dāng)查詢時只需sql加個排序就行, order by ranking, id, 這樣新增時不用先獲取最大ranking值(或count);
現(xiàn)在新增需求, 此時ranking最好在增刪改時, 重新排序好(從1開始到結(jié)束), 需要將已有數(shù)據(jù)排序好:
# 先定義一個變量ranking, 在update時自增 set @ranking = 0; update task_question set ranking = (@ranking := @ranking+1) where task_id = #{Task表主鍵} order by ranking, id;
但是以上sql只能更新某一個Task的數(shù)據(jù), 我這里需要更新所有的Task, 所以寫了一個存儲過程:
# delimiter $$ ???? drop procedure if exists test; # 如果存在名字為test的procedure則刪除 create procedure test() # 創(chuàng)建(創(chuàng)建函數(shù)使用的關(guān)鍵字為function 函數(shù)名()) begin declare taskId bigint; declare flag int default 0; # 這是重點(diǎn),定義一個游標(biāo)來記錄sql查詢的結(jié)果(此處的知識點(diǎn)還有SQL的模糊查詢,見補(bǔ)充) declare taskList cursor for select id from task; # 為下面while循環(huán)建立一個退出標(biāo)志,當(dāng)游標(biāo)遍歷完后將flag的值設(shè)置為1 declare continue handler for not found set flag=1; open taskList; # 打開游標(biāo) # 將游標(biāo)中的值賦給定義好的變量,實(shí)現(xiàn)for循環(huán)的要點(diǎn) fetch taskList into taskId; while flag <> 1 do # 在這里設(shè)置一個局部變量 ranking set @ranking = 0; update task_question set ranking = (@ranking := @ranking+1) where task_id = taskId order by ranking, id; # 游標(biāo)后移 fetch taskList into taskId; end while; close taskList; # 關(guān)閉游標(biāo) end; # $$ # 執(zhí)行存儲過程 call test();
以上是“MySQL中怎樣更新排序值以及存儲過程更新排序值”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)頁名稱:MySQL中怎樣更新排序值以及存儲過程更新排序值
URL標(biāo)題:http://www.chinadenli.net/article28/iejpcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、企業(yè)建站、服務(wù)器托管、品牌網(wǎng)站制作、ChatGPT、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)