簡體   English   中英

PHP中的Mysql - 如何僅更新表中的一行但具有最大的ID號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM