更新行但保留一些字段不变

时间:2012-02-22 14:56:08

标签: php mysql

我想更新一行,但是当没有新值来更新字段时,我想保持未填充的字段。

我知道我可以写一个新的查询,但我的桌子很长,而且我正在寻找一种优雅的方式来完成这项工作。

假设我长桌的一部分如下:

|  id  |   Name   | date_added | date_updated |
-----------------------------------------------
|  1   | Review_1 | 2012-02-10 | 2012-02-20   |

我有一个带复选框的表单。我希望如果用户选中该复选框,则使用当前日期更新字段date_updated。但如果未选中该复选框,则字段date_updated如果保持不变。

if (isset($_POST['updated'])) { 
    $updated = [today's date];
}

目前我的查询是:

mysql_query("UPDATE reviews r, filters f SET 
                                             r.title = '$title', 
                                             r.description = '$description',
                                             r.date_updated = '$updated',
                                             r.link_homepage = '$homepage'
                                             [etc.]
                                             [etc.]

            WHERE r.id = '$id' AND f.id = '$id' ") or die(mysql_error());

5 个答案:

答案 0 :(得分:2)

如果不需要,您可以省略date_updated行。所以:

$updated = '';
if (isset($_POST['updated'])) { 
    $updated = "r.date_updated = NOW(),";
}

然后在查询中:

...
r.description = '$description',
$updated
r.link_homepage = '$homepage'
...

答案 1 :(得分:1)

您可以不在SET条件中指定您想要保留的行,因此将其构建到PHP逻辑中,以便在生成查询时,它不包括您希望单独保留的字段的SET条件。

答案 2 :(得分:1)

您可以这样做:

$updated = (isset($_POST['updated'])) ? "r.date_updated='[your date]'," : '';

mysql_query("UPDATE reviews r, filters f SET 
                                             r.title = '$title', 
                                             r.description = '$description',
                                             $updated
                                             r.link_homepage = '$homepage'
                                             [etc.]
                                             [etc.]

            WHERE r.id = '$id' AND f.id = '$id' ") or die(mysql_error());

答案 3 :(得分:0)

应该没有理由担心您现有的查询......来自MySQL文档:

  

如果将列设置为当前的值,MySQL会注意到这一点   并且不会更新它。

http://dev.mysql.com/doc/refman/5.0/en/update.html

答案 4 :(得分:0)

如果您将SQL查询创建为字符串,然后传递给mysql_query(),则可以使用简单的if语句来检查是否更新。

类似的东西:

$sql = "UPDATE reviews r, filters f SET 
             r.title = '$title', 
             r.description = '$description',";

$sql .= (isset($_POST['updated'])) ? "r.date_updated = '$todaysDate'," : "";

$sql .= " r.date_updated = '$updated',
          r.link_homepage = '$homepage'
          [etc.]";

mysql_query($sql);