【问题标题】:How to display all records from today's UNIX_TIMESTAMP如何显示今天 UNIX_TIMESTAMP 的所有记录
【发布时间】:2018-09-10 10:32:55
【问题描述】:

我正在尝试显示今天发生的所有攻击。这是我的 php 页面中的当前 SQL。但是它没有显示今天发生了多少。

$TodayAttacks = $odb->query("SELECT COUNT(id) FROM `logs` WHERE `date` BETWEEN DATE_SUB(CURDATE(), INTERVAL '-1' DAY) AND UNIX_TIMESTAMP()")->fetchColumn(0);

【问题讨论】:

  • “今天”是指“从今天午夜开始”还是“过去 24 小时内”?
  • @DavidFaber 从午夜开始,因此它将在第二天重置

标签: php mysql timestamp unix-timestamp


【解决方案1】:

如果“今天”是指“从今天午夜开始”,您的查询应该如下所示:

SELECT COUNT(id) FROM logs
 WHERE date >= CURDATE();

如果日志中的日期值有可能大于今天的日期(嘿,发生了奇怪的事情!)那么你想要这个(我建议不要使用BETWEEN 进行日期比较):

SELECT COUNT(id) FROM logs
 WHERE date >= CURDATE()
   AND date < DATE_ADD(CURDATE(), INTERVAL 1 DAY);

如果您的意思是“过去 24 小时内”,您的查询看起来更像这样:

SELECT COUNT(id) FROM logs
 WHERE date >= DATE_SUB(NOW(), INTERVAL 1 DAY);

希望这会有所帮助。

以下每 cmets 已编辑

如果 date 列是 Unix 时间戳值(存储为 INT(11)?),则查询应如下所示:

SELECT COUNT(id) FROM logs
 WHERE date >= UNIX_TIMESTAMP(CURDATE());

还可以执行以下操作来获取过去 24 小时的记录:

SELECT COUNT(id) FROM logs
 WHERE date >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 DAY));

SQL Fiddle here.

【讨论】:

  • 这就是我所拥有的,但它仍然不起作用 - &lt;?php echo $TodayAttacks; ?&gt; $TodayAttacks = $odb-&gt;query("SELECT COUNT(id) FROM logs WHERE date &gt;= CURDATE();")-&gt;fetchColumn(0);
  • 我不知道你所说的“它不起作用”是什么意思......你得到什么结果?直接在 MySQL 中尝试查询会发生什么?
  • 我在网页上得到的结果是0,我在phpMyAdmin中执行sql得到的结果也是0。
  • 您是否有数据让您认为这些答案是错误的?如果是这样,您可以将其添加到问题中吗?
  • 我目前有这个用于运行攻击,如果它发出任何线索,它工作得很好? $RunningAttacks = $odb-&gt;query("SELECT COUNT(*) FROM logs` WHERE time + date > UNIX_TIMESTAMP() AND stopped = 0")->fetchColumn(0);`
猜你喜欢
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
  • 2019-01-22
  • 2016-04-04
  • 2011-07-04
  • 1970-01-01
  • 2014-08-12
  • 2012-01-01
相关资源
最近更新 更多