2015-05-29 56 views
0

我有一個表items其中有一個領域priority。現場優先級中的一半元素具有範圍從1x的唯一值。我想要的元素,其中場priority爲空擁有的x+1增量值y自動遞增空字段,留給非空字段是

我已經試過

UPDATE items 
SET priority = IFNULL(priority, 0) 

但是這不是我想要的。我想非空領域保持原樣,我有以下實現:

SET priority = IFNULL(priority, 0) 

和空字段開始從數值增加,這我得到如下:

SELECT MAX(priority) 
FROM items; 

所以,唯一的事情我想到的是

UPDATE items 
SET priority = 
    IFNULL(priority, 0) + (SELECT MAX(priority) 
          FROM items) 
WHERE priority IS NULL 

不過我也不太知道我怎麼會去這樣做使一些接近。任何提示或提示?

+0

如果你不知道是否會工作,然後只是嘗試,看看它的工作 –

+0

多少,你呢?你會不會需要再次糾正這個問題,還是一次性重新編號?該列尚未具有我假設的AUTO_INCREMENT,因爲如果沒有,它將爲空。我可以看到後情況下,你[添加一個新的AUTO_INCREMENT列(http://stackoverflow.com/questions/9070764/insert-auto-increment-primary-key-to-existing-mysql-database/9​​070808#9070808)將其值設置爲x + 1,然後將舊的現有值更新到新列。也許。 –

+0

@MichaelBerkowski這是一個一次性的事情。並且有30個項目具有從1到30的優先級設置,以及40個具有空優先級的項目。列沒有自動增加或任何類型的東西。 – Quillion

回答

3

您可以獲得當前最大的優先級,並將其存儲在一個變量。然後,通過使用cross join將這個值帶入查詢。您可以增加在set語句中的值:

update items i cross join 
     (select @x := max(priority) from items) maxp 
    set priority = (@x := @x + 1) 
    where priority is null; 
+0

謝謝!它的作品,一個小編輯,它是很好的去! – Quillion

+0

@Quillion您能否發佈您編輯的內容? – cjds

+1

@CarlSaldanha我做過了,一旦它被同行評審,它就會顯示出來。我編輯了實際的答案,並在連接部分添加了「來自項目」。 – Quillion