我想更新一行,但是当没有新值来更新字段时,我想保持未填充的字段。
我知道我可以写一个新的查询,但我的桌子很长,而且我正在寻找一种优雅的方式来完成这项工作。
假设我长桌的一部分如下:
| 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());
答案 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会注意到这一点 并且不会更新它。
答案 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);