![](/img/trans.png)
[英]PHP: Taking the last row's id number from one mysql table and using it to update a field in the first row of another table
[英]Mysql in PHP - how to update only one row in table but with greatest id number
我正在嘗試更新我的數據庫中的字段,但遇到了這樣一個簡單的問題:我只想更新表中具有最大 ID 號的一行。 我會做這樣的事情:
UPDATE table SET name='test_name' WHERE id = max(id)
不幸的是它不起作用。 有任何想法嗎?
id | name
---|------
1 | ghost
2 | fox
3 | ghost
我只想更新最后一行,因為 ID 號是最大的。
在此位置無法使用MAX()
。 但是你可以這樣做:
UPDATE table SET name='test_name' ORDER BY id DESC LIMIT 1;
UPDATE table SET name='test_name' WHERE id = (SELECT max(id) FROM table)
此查詢將返回錯誤,因為您無法從正在更新的同一個表中執行 SELECT 子查詢。
嘗試使用這個:
UPDATE table SET name='test_name' WHERE id = (
SELECT uid FROM (
SELECT MAX(id) FROM table AS t
) AS tmp
)
這會創建一個臨時表,它允許對 UPDATE 和 SELECT 使用相同的表,但以性能為代價。
我認為 iblue 的方法可能是您最好的選擇; 但另一種解決方案可能是將結果設置為變量,然后在 UPDATE 語句中使用該變量。
SET @max = (SELECT max(`id`) FROM `table`);
UPDATE `table` SET `name` = "FOO" WHERE `id` = @max;
如果您希望使用相同的 ID 運行多個查詢,這可能會派上用場,但如果您只執行一個更新操作,則運行兩個查詢並不是很理想。
UPDATE table_NAME
SET COLUMN_NAME='COLUMN_VALUE'
ORDER BY ID
DESC LIMIT 1;
因為您不能使用SELECT IN DELETE OR UPDATE CLAUSE.ORDER BY ID DESC LIMIT 1
。 這為您提供了具有最大值MAX(ID)
就像您嘗試做的那樣。 但是MAX(ID)
不起作用。
老問題,但對於遇到此問題的任何人,您也可以這樣做:
UPDATE
`table_name` a
JOIN (SELECT MAX(`id`) AS `maxid` FROM `table_name`) b ON (b.`maxid` = a.`id`)
SET a.`name` = 'test_name';
我們可以使用max()函數更新記錄,也許它會對您有所幫助。
UPDATE MainTable
SET [Date] = GETDATE()
where [ID] = (SELECT MAX([ID]) FROM MainTable)
它對我來說是完美的。
我必須用連續數字更新表格。
這就是我的做法。
UPDATE pos_facturaciondian fdu
SET fdu.idfacturacompra = '".$resultado["afectados"]."',
fdu.fechacreacion = '".$fechacreacion."'
WHERE idfacturaciondian =
(
SELECT min(idfacturaciondian) FROM
(
SELECT *
FROM pos_facturaciondian fds
WHERE fds.idfacturacompra = ''
ORDER BY fds.idfacturaciondian
) as idfacturaciondian
)
使用 PHP 我傾向於運行一個mysqli_num_rows
然后將結果放入一個變量中,然后執行一個UPDATE
語句,說明其中 ID = 新創建的變量。 有些人發帖說,最后不需要使用LIMIT 1
,但我喜歡這樣做,因為它不會造成任何微不足道的延遲,但可以防止采取任何不可預見的行動。
如果您剛剛插入了該行,您可以使用 PHP 的mysqli_insert_id
函數自動返回此 ID,而無需運行mysqli_num_rows
查詢。
首先選擇最大id,然后更新。
UPDATE table SET name='test_name' WHERE id = (SELECT max(id) FROM table)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.