MySQL自定義變數處理行號問題

壹頁書發表於2014-07-16
今天遇到一個業務性很強的問題。
應該不是很通用。

實驗資料初始化:
  1. create table test
  2. (
  3.     id int primary key ,
  4.     Priority int not null
  5. );

  6. insert into test values(30,1),(31,1),(32,1),(33,2),(34,3),(35,4),(36,4),(37,5),(38,5);
  7. commit;


Priority欄位是編輯手工填上去的,很有可能是重複的。
業務的需求是先根據Priority排序,然後在根據id排序,對結果生成一個順序連續的行號,然後更新到Priority欄位。

處理的SQL如下:
  1. UPDATE (SELECT @a := @a + 1 AS rn, id
  2.     FROM test, (SELECT @a := 0
  3.         ) t
  4.     ORDER BY Priority, id
  5.     ) t1, test t2
  6. SET t2.Priority = t1.rn
  7. WHERE t2.id = t1.id;
通過自定義變數,給排序的結果附加一個行號列,然後通過id更新源表。

更新後的結果已經符合業務的要求了。
如果是Oracle資料庫,這個就簡單多了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1220458/,如需轉載,請註明出處,否則將追究法律責任。

相關文章