我目前正在使用两个更新查询,我想知道是否有办法将其削减为一个.
field1 OFTYPE INT
field2 OFTYPE DATETIME
field3 OFTYPE DATETIME
UPDATE `Table1` SET `field1` = `field1` + 1, `field2` = NOW() WHERE `id` = $id;
UPDATE `Table1` SET `field3` = NOW() WHERE `id` = $id AND (`field3` < '2011-00-00 00:00:00' OR `field3` IS NULL);
我正在尝试获得更多更新的查询:
UPDATE `Table1` 
SET `field1` = `field1` + 1,
    `field2` = NOW(),
    `field3` = ISNULL(NOW(), `first_seen`);
Mys*_*cXG 72
我认为你可以使用IF语句来做到这一点.当你使用它时,IF语句需要3个参数:表达式,如果为true则为value,如果为false则为value
因此,在您的情况下,您可以像以下一样编写查询:
UPDATE Table1 
SET 
    field1 = field1 + 1, 
    field2 = NOW(),
    field3 = IF(field3 < '2011-00-00 00:00:00' OR field3 IS NULL, NOW(), field3)
WHERE id = $id;
这样,如果表达式为真,那么field3将是NOW(),否则,它将保持原样.
Ami*_*Ami 12
在你的情况下你可以使用CASE*:
UPDATE Table1
SET field1 = field1 + 1,
  field2 = NOW(),
  field3 =
        CASE
        WHEN field3 < '2011-00-00 00:00:00' THEN /* Evaluates to false if NULL */
          NOW()
        WHEN field3 IS NULL THEN
          NOW()
        ELSE /* Don't change */
          field3
        END
WHERE id = 1
*双打可选
小智 7
你可以这样做:
UPDATE `Table1` 
SET `field1` = `field1` + 1,
    `field2` = NOW(),
    `field3` = COALESCE(field3, NOW())
WHERE id = 1;
这将更新所有 field1 和 field2,如果 field3 为 null 也会更新它,如果它不是 null 它将保持原样。但这仅适用于 NULL !!!
| 归档时间: | 
 | 
| 查看次数: | 52974 次 | 
| 最近记录: |