2011-12-13 42 views
1

我一直在試圖弄清楚如何在36小時內更新數據庫中最新人員的ID。它呻吟FROM子句中的clients,但是當我刪除該子句時,更新會影響整個數據庫中的每個ID。數據庫更新需要FROM子句,但FROM子句導致錯誤

UPDATE clients SET ID = $id WHERE timestamp = (SELECT MAX(timestamp) FROM clients) 

我在做什麼錯?

+3

也許你想要嗎? – zerkms

+0

請提供表格結構和錯誤 – Nonym

+2

'id'是否是主鍵?如果是 - 那麼這是一個非常糟糕的做法,千萬不要改變PK – zerkms

回答

2

將其替換

UPDATE clients SET ID = $id ORDER BY `timestamp` DESC LIMIT 1 

PS:此查詢解決了這個問題:「來更新最新的人的ID在我的數據庫」

+0

謝謝隊友,我相信我的方式是正確的,但是沒有你是正確的:) – WhiteFinger

1

指定的原始任務不能更新使用從完全相同的表中彙總的WHERE條件的表。所以,現在我們需要猜測其確切的錯誤你有

UPDATE 
    client 
SET 
    client.[id] = $id 
ORDER BY 
    client.[timestamp] DESC 
LIMIT 1 
+0

實際上有一個雙嵌套查詢的技巧 – zerkms

+0

有,但這將是一個嵌套查詢,又名派生表,而不是*完全相同的表*這就是我所說的 – Matthew

+0

在這種特殊情況下,我們也有*嵌套查詢*。雙重嵌套不是關於「派生表」,而是關於一個mysql查詢分析器,它不足以檢測這些作弊行爲 – zerkms