2013-01-08 50 views
3

這似乎是一個簡單的問題,但不幸的是我找不到例子。更新PHP的最後10條記錄Mysql表

假設我想使用UPDATE語句進入php來更新數據庫「用戶」的表「用戶」的最後10條記錄。它的代碼是什麼?我的意思是插入句子有一個
答案,使用LIMIT等,但更新沒有它。

在此先感謝您的幫助。

pd:例如,我想在最近的10條記錄中用「邁克爾」字更新「名字」字段。

+0

除非您指定SQL,否則SQL沒有順序。所以你需要有一個條件來對你的表中的數據進行排序。什麼會使排成爲最後10個之一?從顯示最後10條記錄的SELECT查詢開始。將該查詢添加到您的問題。這會給你很快的答案。 – hakre

+0

用戶表中是否有任何唯一的自動增量列? – rizon

回答

10

試試這個

UPDATE table SET notes="hi" 
ORDER BY id DESC 
LIMIT 10 

按mysql的文檔,如果有一個唯一的列,以便通過它DESC和使用LIMIT 10來選擇最後的10條記錄。

UPDATE [LOW_PRIORITY] [IGNORE] table_reference 
     SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... 
     [WHERE where_condition] 
     [ORDER BY ...] 
     [LIMIT row_count] 
+0

感謝@rizon第一個更新句子的作品,但相反「嗨」,我們必須使用'嗨'。 – JuanFernandoz

1

您還沒有提供任何輸入到你的表的模式,但在這裏是什麼想法可以工作:

UPDATE users SET firstname='michael' WHERE id >= (SELECT MAX(id)-10 FROM users); 
+0

部分作品@sixeightzero由於某種原因,查詢做24行更新,而不是10. – JuanFernandoz

3

你可以做這樣的事情。

方法1

UPDATE table_name SET column_name='value' WHERE id IN (SELECT id FROM table_name ORDER BY id desc LIMIT 0, 10); 

方法2

如果你看一下docs

UPDATE [LOW_PRIORITY] [IGNORE] table_reference 
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... 
    [WHERE where_condition] 
    [ORDER BY ...] 
    [LIMIT row_count] 

這意味着下面也應該爲你工作

UPDATE table_name SET column_name='value' ORDER BY id desc LIMIT 10; 

嘗試其中一種適合您的方法,並讓我知道您是否有任何問題。

+0

嗨@Dasun第一種方法返回「此版本的MySQL尚不支持'LIMIT&IN/ALL/ANY/SOME子查詢」這是一個新的mysql功能? – JuanFernandoz

+0

我不太確定這個問題是什麼,讓我來研究一下。嘗試方法2,這將肯定工作。 – Techie

+0

第二種方法顯示了這一點:您的SQL語法有錯誤;檢查對應於你的MySQL服務器版本的手冊,在第一行 (我以前試過沒有成功)附近的'10'使用正確的語法。 – JuanFernandoz