MySQL PHP仅在更新特定列时更新DateTime

时间:2015-10-11 21:12:52

标签: php mysql sql

我制作了一个非常简单的PHP脚本,它将1增加到我的members表中的洗碗机行。当它看起来像这样时它可以工作:

PHP:

include "admin/vars.php";

//connect to the database
$db = mysql_connect($db_host,$db_user,$db_pass);
      mysql_select_db($db_name);


//Runs when user sends GET
if(isset($_GET['name'])) {
$name = $_GET['name'];
// Increment the dishwasher_count by 1 and update the dishwasher_latest field value of the requested name.
$update = mysql_query("UPDATE members SET dishwasher_count = dishwasher_count + 1 WHERE name='$name';

}


$result = mysql_query("SELECT name, dishwasher_count, dishwasher_latest FROM members ORDER BY dishwasher_count DESC");
while($row = mysql_fetch_assoc($result)){
      echo "<h2>" . $row["name"]. 
      " <a id='1' href='./?name=" . $row["name"] . "' class='fa fa-plus-circle' ></a></h2>
      <p class='margin'>Urplockningar: " 
      . $row["dishwasher_count"]. "<br>
      Senaste: " . $row["dishwasher_latest"] . "</p>";
}

mysql_close($db);

问题是我希望它还显示最新的增量,我通过使用MySQL中的“TIMESTAMP”和“更新CURRENT_TIMESTAMP”来实现它。但问题是,当更新任何行时,它会更新TIMESTAMP,我只希望它在更新洗碗机更新时将dishwasher_latest更新为当前时间。

我已经尝试过这样做了,但它似乎扼杀了SQL:

$update = mysql_query("UPDATE members SET dishwasher_count = dishwasher_count + 1 WHERE name='$name'; UPDATE members SET dishwasher_latest=now()");

我一直在处理这个问题已经有一段时间了,但无法让它发挥作用。我怎么能让这个工作?

2 个答案:

答案 0 :(得分:2)

如果要记录特定列的更改时间,则不能使用timestamp列,即记录中任何字段更改时的记录。

您将datetime字段更新为当前时间的想法很好,只需要处理实施。 mysql_query()不支持在1次调用中执行多个语句。您根本不应该使用mysql _ *()函数,它们已被弃用。

解决方案:

  1. 在单个查询中合并2个更新:更新表集field1 = ...,field2 = ... where field3 = ...
  2. 使用mysqli或pdo insted mysql模块并用它们执行2个语句。只需确保第二个aldo具有where标准,否则整个表格将被更新。
  3. 使用2个语句进行2次单独的mysql_query()调用。再次,注意哪里。
  4. 您也可以使用触发器,但这可能是一种过度杀伤。

答案 1 :(得分:1)

你在找这样的东西吗?

UPDATE members SET dishwasher_count = dishwasher_count + 1,dishwasher_latest=now() WHERE name="$name";

这只会更新受新时间戳影响的行