2012-02-22 80 views
3

我想更新一行,但是我想在没有新值更新字段时将字段保留不变。更新行但保持不变一些字段

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

比方说,我的长条桌的那部分如下:

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

回答

2

你可以只离开了日期date_updated行,如果不需要的话。所以:

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

,然后在查询:

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

你可以只是没有指定要独自留在设定的标准行,所以,这样产生的,当它加入你的PHP逻辑查询它不包括您想单独放置的字段的SET条件。

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); 
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()); 
相关问题