【问题标题】:Adding Timestamp to Database Table将时间戳添加到数据库表
【发布时间】:2012-04-04 23:25:48
【问题描述】:

我有一个更新数据库服务器上条目的 html/php 表单。我需要在每一行中添加一个字段,指示添加该条目的时间,换句话说,就是创建该条目的时间戳。我一直在寻找,发现这个:

http://www.createafreewebsite.net/phpmysql/alter.html

我会做类似的事情吗:

$timestamp = time();
mysql_query("ALTER TABLE notification
ADD timestamp CHAR(30) AFTER names);

mysql_query("INSERT INTO notification (`timestamp`) values ('$timestamp');

这是处理它的正确方法吗?我是否使用了正确的数据类型?我需要将时间戳与稍后从 javascript 文件生成的另一个时间戳进行比较。例如,如果 timestamp1 小于 timestamp2 则执行以下功能...

任何信息都会有所帮助,谢谢!

编辑:

按要求提供信息:

到目前为止我有:

mysql_query("INSERT INTO notification (`program`, `month`, `day`, `year`, `sponsor`, `type`, `category`, `range`, `desc`) values ('$pName' ,  '$month' , '$day' , '$year' , '$sponsor' , '$type' , '$category' , '$range' , '$desc')");

【问题讨论】:

  • 您介意发布您要向其中添加列的表的结构吗?使用 INSERT 语句不会将任何数据插入到表的其他列中,如果其中一个或多个是 NOT NULL 并且没有默认值,则会失败。
  • 我已经添加了我当前的插入行

标签: php javascript mysql sql


【解决方案1】:

time() 在 PHP 中会产生一个时间戳,你的 MySQL 表可能需要另一种格式,所以你可以这样做:

mysql_query("INSERT INTO notification (`timestamp`) values (NOW());

它也适用于日期和日期时间字段。

即使您的表是 CHAR(30),您仍然可以少用一个变量。

如果您将列数据类型更改为TIMESTAMP,那么您可以使用on update CURRENT_TIMESTAMP 为您填充表格单元格。

【讨论】:

  • 您好,感谢您的回复,这会生成数字时间戳,还是用户可以阅读的格式?我实际上在想,仅使用数字时间戳进行数学比较会更容易,例如 1332249169 而不是 Tue Mar 20 2012 09:02:49
  • 最好使用 MySQL 日期格式,您可以使用 PHP 中的strtotime()轻松将它们转换为时间戳
  • 很好!,这个strtotime() 也可以用javascript 完成吗?我正在考虑用js从数据库中读取表时间戳列,并将其与当前时间进行比较。
  • 如果没有 PHP 的帮助,JS 无法读取表格,因此您可以在将数据传递给 JS 之前使用 strtotime()。
  • "您可以使用on update CURRENT_TIMESTAMP 为您填充表格单元格。" - 这不会同时更新UPDATEINSERT 上的列吗?当然,这可能是 OP 想要的。
【解决方案2】:

timestamp 应该有一个时间戳数据类型。 http://dev.mysql.com/doc/refman/5.0/en/datetime.html

【讨论】:

    【解决方案3】:

    您绝对不希望使用具有 CHAR 或 VARCHAR 数据类型的列来存储日期或时间戳 - 这会使以后的比较变得困难。此外,您应该考虑在timestamp 列上设置一个默认值,以便在插入行时自动填充它,或者在notification 表上使用插入触发器来进行填充。这样就减少了开发人员出错的机会。

    CREATE TRIGGER notification_timestamp BEFORE INSERT
        ON notification FOR EACH ROW
    BEGIN
        SET new.timestamp = NOW();
    END;
    

    如果语法不完全正确,请致歉。

    【讨论】:

    • 您好,感谢您的帖子,我正在尝试按照您的建议进行操作,但我对 SQL 完全陌生。我将如何“使用”您的代码,到目前为止,我一直在使用 PHP 代码添加和编辑表格。代码如何知道将时间戳插入哪一列?
    • 在触发器中,new 表指的是插入/更新的数据,而old 表指的是正在更新或删除的数据。因此,通过使用SET new.timestamp = NOW(),您告诉 MySQL 将 timestamp 列的值设置为当前时间(顺便说一下,您可能希望为该列选择另一个名称,因为 timestamp 是 MySQL 中的数据类型) (NOW()CURRENT_TIMESTAMP() 的同义词)并将其用于要插入的行。
    • 所以CREATE TRIGGER name_of_timestamp_col BEFORE INSERTON table_name FOR EACH ROWBEGINSET new.timestamp = NOW();END;
    猜你喜欢
    • 2015-12-03
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 2010-10-26
    • 2014-03-18
    • 1970-01-01
    • 2015-03-09
    • 2011-01-10
    相关资源
    最近更新 更多