2011-12-13 47 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