2011-07-27 135 views
0

我喜欢做这样的事情:Mysql的更新值

UPDATE articles 
SET live = 1 
WHERE aid=3 
ORDER BY created DESC 
LIMIT 1 

最新的文章应该是活的。这在我的小CMS中经常需要。但是这个查询返回一个错误:

#1221 - Incorrect usage of UPDATE and ORDER BY 

不允许在UPDATE查询中使用ORDER BY或LIMIT吗?

我一个子查询试了一下:

UPDATE articles 
SET live=1 
WHERE id= (SELECT id FROM articles WHERE aid=3 ORDER BY created DESC LIMIT 1) 

但是,这是不允许的,太...你不能使用相同的表UPDATE和一个查询SELECT查询...

解决方案是什么?我不想创建TMP表,因为这需要经常进行。是PHP必备的解决方法吗?

+1

您的第一个查询应该可以工作。我想你有一些JOIN。发布确切的查询不起作用,所以我们可以提供帮助。 –

回答

2

它只是简单的工作,唯一的限制是你只能在更新中使用单个表,而不是多个(连接等)。请参阅the docs。如果您需要使用多表语句,那么您可以使用LEFT JOIN指向同一个表,只选择没有更大“创建”值的行,前提是您有一个不可空列。