是否有可能在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'
是否有可能在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'
答案很簡單 - 不,這是不可能的。
較長的回答,是的,如果您使用存儲過程增加指定的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顯然不允許存儲過程自己鎖定表。
爲什麼新downvote? AFAICS這正是OP想要的! – Alnitak
號,您需要選擇該線路之後
你可以做
status = mysql_query(mysql,
"UPDATE table SET number=number+1 WHERE id='uniqid';\
SELECT FROM table WHERE id='uniqid';\
");
,並使用mysql_next_result()
得到的結果。
這不起作用。多個查詢不能在單個查詢調用中發出。這是不允許的PHP的MySQL驅動程序。 –
@luvPlsQL是對的。但基本上你需要首先獲取數據,然後增加數據然後更新。最後在更新之前獲得增加的變量,以便您可以使用它。
有沒有程序的方法。您可以將新值存儲在會話變量中並從下一個語句中獲取。
UPDATE table
SET number =(@next_value:= number + 1)WHERE id ='uniqid';
螞蟻然後:
SELECT @next_value;
您的會話變量不受其他增量的影響。
也許存儲過程會有所幫助。 – 2011-11-22 18:27:51
我認爲一個存儲過程是有序的,因爲一個選擇的增量有可能在初始增量和選擇之間出現另一個增量。 – Zikes
或者如果你設置爲不使用存儲過程,首先選擇數字,然後在php中添加一個,然後更新,以便代碼可以確定它使用的是它更新的數字。 –