【问题标题】:Update field with result of DateDiff of two other populated fields使用其他两个填充字段的 DateDiff 结果更新字段
【发布时间】:2015-08-12 17:51:09
【问题描述】:

我需要做的就是获取两个日期时间字段并将第三个字段设置为其结果。

这一定很简单,但我已经研究了 2 天,无法得到我想要的结果。

$con = mysqli_connect(DBHOST, DBUSER, DBPASS, DBNAME) or die('Connection failed: ' . mysqli_connect_error());

$helpme=mysqli_query($con, "UPDATE chat_main SET Exact_Time = DATEDIFF(Start_TimeStamp, End_TimeStamp)");

mysqli_close($con);

【问题讨论】:

  • 您应该从update 查询中获取什么?
  • $helpme 是 UPDATE 查询的结果。它不返回结果。因此,您不能使用mysql_fetch_array 来获得结果。如果您的查询是 SELECT,您可以获得结果。
  • 好吧,你是说,使用 select,然后执行 fetch,然后用结果更新 table?
  • 是的。更新后,您使用:$helpme = mysqliquery($con, "SELECT Exact_Time from chat_main");,然后获取结果。当然,您应该检查是否从 UPDATE 或 SELECT 中得到错误。如果出现错误,则无法获取任何内容。
  • @Lori DATEDIFF 函数返回一个整数(两个日期之间的天数)。看起来您的两个字段在同一天,因此 DATEDIFF 可能会返回 0。我认为您需要 TIMEDIFF。

标签: php mysql sql


【解决方案1】:

问题在于 DATEDIFF 返回两个日期之间的天数。看来,在您的实施环境中,这两个日期是在同一天。所以,你总是得到 0 作为 DATEDIFF 的结果。我建议使用TIMEDIFF,这将是两次的差异,而不是两个日期。

【讨论】:

    【解决方案2】:

    这个问题真的应该回答。如果其他人添加了更好的答案,我将删除答案。

    DATEDIFF 函数仅对DATETIME 的“日期”部分进行操作,并返回整数天数。

    要获得两个 DATETIME 值之间的秒数差,您可以使用TIMESTAMPDIFF 函数。

    要获得作为TIME 值返回的差值,您可以使用TIMEDIFF 函数。


    这引出了为什么需要存储它的问题,因为这个表达式可以在 SELECT 语句中计算。 (存储它的一个很好的理由是您想在其上添加索引,而 MySQL 不支持基于函数的索引。)


    而且,UPDATE 语句不会返回结果集,因此您无法像从 SELECT 语句中那样从中获取行。

    【讨论】:

    • 谢谢@Spencer7593。我明白这一切,我只是为了测试目的而获取行来查看信息。 timediff 是我正在处理的项目的关键部分,我需要存储它。没有其他原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2013-08-04
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多