Php 更新行,但保留某些字段不变

Php 更新行,但保留某些字段不变,php,mysql,Php,Mysql,我想更新一行,但我想在没有新值可用于更新字段时保留字段不分格 我知道我可以编写一个新的查询,但是我的表很长,我正在寻找一种优雅的方法来完成这项工作 假设我的长表的一部分如下所示: | id | Name | date_added | date_updated | ----------------------------------------------- | 1 | Review_1 | 2012-02-10 | 2012-02-20 | 我有一张带复选框的表格。我希望

我想更新一行,但我想在没有新值可用于更新字段时保留字段不分格

我知道我可以编写一个新的查询,但是我的表很长,我正在寻找一种优雅的方法来完成这项工作

假设我的长表的一部分如下所示:

|  id  |   Name   | date_added | date_updated |
-----------------------------------------------
|  1   | Review_1 | 2012-02-10 | 2012-02-20   |
我有一张带复选框的表格。我希望,如果用户选中复选框,则字段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());

您不能在设置条件中指定要保留的行,因此将其构建到您的PHP逻辑中,以便在生成查询时不包含要保留的字段的设置条件。

应该没有理由担心现有查询。。。从MySQL文档:

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


如果将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);

您可以这样做,例如:

$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());

如果不需要的话,您可以省略date_updated行。因此:

$updated = '';
if (isset($_POST['updated'])) { 
    $updated = "r.date_updated = NOW(),";
}
然后在查询中:

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