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'
...