【问题标题】:Fetch data from mysql by converting it's timestamp to unix time通过将时间戳转换为 unix 时间从 mysql 获取数据
【发布时间】:2011-05-28 15:05:29
【问题描述】:

这将通过 PHP 完成。

我基本上想获取30分钟前插入的行数。

我的表上有一个时间字段,类型为 TIMESTAMP,更新时它设置为 CURRENT_TIMESTAMP。

日期以这种格式存储:

2011-05-27 04:29:17

我的查询应该是这样的,但是我做不到

SELECT COUNT(*) FROM mytable WHERE UNIX_TIMESTAMP(time) < '.time().'-1800

其中 time() 是 PHP 获取 UNIX 时间的函数。

它基本上应该做的是打印我从现在到 30 分钟前插入的行数,但我似乎无法让它工作。

有人可以帮忙吗?

小编辑: 我看到的另一个问题是 php 的函数 time() 显示的是 UTC 的 unix 时间。存储在 mysql 中的时间可能是 GMT,即我的计算机的时间/时区设置为什么。

【问题讨论】:

  • 我遇到了 dikidera 在他的“小编辑”中提到的相同问题。我正在寻找的是 php 在哪里获得 time() 与 MySQL 在哪里获得 ON UPDATE CURRENT_TIMESTAMP。我真的不在乎是否使用 UTC,我只需要它们匹配。

标签: php mysql


【解决方案1】:

您可以轻松获取从现在存储到30 mins 之前的行,只需使用:

SELECT count(*) FROM mytable WHERE `time` >= DATE_SUB(UTC_TIMESTAMP, INTERVAL 30 minute)

UTC_TIMESTAMP 的使用只是一个示例,如果您将日期/时间数据存储为 UTC_TIMESTAMP(),您可以在必要时使用 NOW(),具体取决于您实际存储的内容。

**编辑** 删除了错误的指针并修复了示例:)

【讨论】:

  • @tradyblix:无需更改COUNT(*)
  • 奇怪的是,当我直接通过 PHPMyAdmin 运行此查询时,我得到了表中的所有行,这些行是一天前插入的,而不是 30 分钟前
  • @tradyblix:你所说的COUNT() 在 MySQL 中是完全错误的。 MySQL 实际上运行COUNT(*)COUNT(field) 快。只需使用具有几百万行的表来尝试一下。
  • @ypercube 我的错,为了大家好:)
  • @dikidera:试试看,用NOW()代替UTC_TIMESTAMP
【解决方案2】:
  1. 您真的需要您计算机的时区与 UTC 不同吗?为什么不将其设置为 UTC 并避免混淆?如果这不起作用,只需在 mysql 上使用 dateadd() 在检查时将您的 mysql 时间戳转换为 UTC?

  2. 我的建议是编写一个小函数来将 mysql 时间戳转换为您的 PHP 时间戳格式并将其加载到 mysql 中。然后,您需要做的就是在查询中调用 tmstamp(time_stamp) 而不是 time_stamp。您也可以反过来做,即将 PHP 的“30 分钟前”时间戳转换为 mysql 格式并重新运行您的查询(可能更容易)。

通常这只是格式问题。它没有跨程序标准化。

【讨论】:

  • 嗯,要求是以UTC在MySQL中存储时间。我对时区很不满意。但是你看,我无权访问在mysql中存储数据的应用程序,所以mysql必须添加它自己的时间戳。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2012-08-19
  • 2013-04-07
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多