0

我想在任何情况下更新一行,除了一个特定字段应该在另一个有某些条件时更新。

在这种情况下,一个例子是当我想更新一篇文章时。该articles表有 5 个布尔列(id、标题、内容、发布日期、发布)published

现在我希望在任何情况下都更新一个特定的行,但如果是真的publishdate应该更新。published我希望它在一个查询中。

有没有办法做这样的事情?

编辑 我想检查查询中的值published,而不是数据库中的值。就像是:

UPDATE articles SET (published AS b) = true, publishdate = (b==true? 'new date': b)
4

2 回答 2

3
UPDATE articles
SET publishdate = CASE WHEN published = 1 THEN <new value> ELSE publishdate END 
    [, ...]
[WHERE ...]

如果您想检查参数值,那么您也可以这样做:

UPDATE articles
SET publishdate = CASE WHEN @published = 1 THEN <new value> ELSE publishdate END 
    [, ...]
[WHERE ...]
于 2013-01-17T08:17:04.753 回答
3

你可以使用inline IF语句。例如

UPDATE articles
SET publishedDate = IF(published = 1, 'new date HERE', publishedDate)
-- WHERE condition here

这假设1 = true,如果您将布尔值存储为字符串,那么IF(published = 'true',...

更新 1

-- assumes 0 = false, 1 = true
SET @status := 1;
SET @newDate := CURDATE();

UPDATE articles
SET publishedDate = IF(1 = @status, @newDate, publishedDate),
    published = @status
-- WHERE condition here
于 2013-01-17T08:17:11.007 回答