2015-10-10 36 views
1

有一個類似的問題 Insert sequential number in MySQL基於另一個字段中插入序列號 - MySQL的

我想插入序列號表,但基於另一個字段。我有兩列page_numnerparent,所以具有相同父代的行應該有page_number作爲連續數字。如果父母更改,頁面應該從1開始再增加1。

我想用水木清華這樣

SELECT @i:=0; 
SELECT @p:=0; 

UPDATE my_table AS t SET page_number = CASE 
WHEN @p = t.`parent` THEN @i:[email protected]+1 
ELSE 1 -- assign current parent to @p ?? 
END 

但是,它無法弄清楚如何將新的父分配到@pelse情況。

請注意,我試圖用純MySQL來實現這一點(如果可能的話,當然)

感謝

回答

1

你可以做你想做這個代碼是什麼:

set @p := -1; 
set @i := 0; 

UPDATE my_table t 
    SET page_number = (CASE WHEN @p = t.`parent` THEN @i := @i+ 1 
          WHEN (@p := t.parent) = NULL THEN NULL -- never happens 
          ELSE @i := 1 
         END) 
    ORDER BY t.parent; 

不幸,MySQL不允許在同一UPDATE查詢中同時使用ORDER BYJOIN。如果是這樣,你可以初始化查詢中的變量。

注意第二個條件只是做了任務。 = NULL永不返回TRUE

+0

MySQL在同一個查詢中絕對支持'ORDER BY'和'JOIN'。 – defines

+0

@defines。 。 。我認爲上下文很明顯。這是指「UPDATE」:https://dev.mysql.com/doc/refman/5.6/en/update.html。 –

+0

感謝您的答案,這幾乎工作,但我想弄清楚一個小問題。可以說,對於'parent = 1',它指定了從1到15的頁碼,對於'parent = 2',第一個頁碼是1,但第二個是16,我猜是因爲var'@ i'結束了15,當父母改變時,是否有辦法將其重置爲0?謝謝 – dav