Mysql UPDATE上最大的价值

时间:2011-07-27 23:26:52

标签: php 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 个答案:

答案 0 :(得分:2)

它只是显而易见,唯一的限制是你只能在更新中使用单个表,而不是多个表(连接等)。请参阅the docs。如果你需要一个多表语句真的很糟糕,你可以使用LEFT JOIN到同一个表,只选择没有更大“创建”值的行,只要你有一个不可为空的列。