2011-11-22 90 views
5

是否有可能在MySQL + PHP中增加一個INT值並在一個查詢中返回新值?我可以更新INT值+1並返回新值嗎?

$sql = mysql_query("UPDATE table SET number=number+1 WHERE id='uniqid'"); 

$updated_number = ??? 

或者我需要發佈另一個查詢?

SELECT number FROM table WHERE id='uniqid' 
+2

也許存儲過程會有所幫助。 – 2011-11-22 18:27:51

+0

我認爲一個存儲過程是有序的,因爲一個選擇的增量有可能在初始增量和選擇之間出現另一個增量。 – Zikes

+0

或者如果你設置爲不使用存儲過程,首先選擇數字,然後在php中添加一個,然後更新,以便代碼可以確定它使用的是它更新的數字。 –

回答

7

答案很簡單 - 不,這是不可能的。

較長的回答,是的,如果您使用存儲過程增加指定的ID的值,檢索新值並返回它。

我剛剛測試了這個MySQL 59年1月5日在:

CREATE PROCEDURE increment (IN uniqid VARCHAR(255)) 
BEGIN 
    UPDATE `table` SET number = number + 1 WHERE id = uniqid; 
    SELECT number FROM `table` WHERE id = uniqid; 
END 

用法:

CALL increment(uniqid) 

如果多個同時訪問是可能的,你不妨LOCK表首先要保證操作的原子性 - MySQL顯然不允許存儲過程自己鎖定表。

+0

爲什麼新downvote? AFAICS這正是OP想要的! – Alnitak

7

號,您需要選擇該線路之後

-1

你可以做

status = mysql_query(mysql, 
        "UPDATE table SET number=number+1 WHERE id='uniqid';\ 
         SELECT FROM table WHERE id='uniqid';\ 
        "); 

,並使用mysql_next_result()得到的結果。

+2

這不起作用。多個查詢不能在單個查詢調用中發出。這是不允許的PHP的MySQL驅動程序。 –

-2

@luvPlsQL是對的。但基本上你需要首先獲取數據,然後增加數據然後更新。最後在更新之前獲得增加的變量,以便您可以使用它。

0

有沒有程序的方法。您可以將新值存儲在會話變量中並從下一個語句中獲取。

UPDATE table SET number =(@next_value:= number + 1)WHERE id ='uniqid';

螞蟻然後:

SELECT @next_value;

您的會話變量不受其他增量的影響。