PHP MySQL group by unix Timestamp 用于报告

标签 php mysql

我有一个表 tbl_news,我想创建几个报告,例如今天、本周、本月。

我已将时间存储在“news_adate”处的 unix 时间戳中。对于本周的报告,我使用以下查询。

$first = date('Y-m-d',strtotime("monday this week"));
$last = date('Y-m-d',strtotime("sunday this week"));

$first = $first ." 00:00:01";
$last = $last ." 23:59:59";

$query = "SELECT count(nid), news_adate FROM tbl_news WHERE (news_adate between '".$first."' AND '".$last."') AND tbl_news.news_status=1 GROUP BY DATE(FROM_UNIXTIME(tbl_news.news_adate))" ;

我得到以下输出。

25-Oct 2015     1

27-Oct 2015     45

但实际上应该是

25-Oct 2015     1

26-Oct 2015     35

27-Oct 2015     10

不知道错误出在哪里?

最佳答案

只是在黑暗中拍摄,但您说 00:00:01 到 23:59:59 之间就错过了午夜时间,对吗?是什么促使您使用 Unix 时间戳而不是 MySQL now() 函数来存储日期时间值?我发现使用 trunc() 等 MySQL 函数查询 MySQL 日期格式要容易得多且更易于操作。通常我会存储两者,但在查询日期时,我更喜欢 MySQL 日期时间列,而不是表示时间的整数。 所以我的第一个建议是检查这个输出:

 $first = date('Y-m-d',strtotime("monday this week"));
$last = date('Y-m-d',strtotime("sunday this week"));

$first = $first ." 00:00:01";
$last = $last ." 23:59:59";

$query = "SELECT count(nid), news_adate FROM tbl_news WHERE (news_adate between '".$first."' AND '".$last."') AND tbl_news.news_status=1 GROUP BY DATE(FROM_UNIXTIME(tbl_news.news_adate))" ;

Echo $query;

任何时候构建查询时,都应该检查字符串的值,以确保它确实是您想要查询的内容。

您还可以使用 Toad 等 SQL 工具来帮助您构建有效的查询并在用变量替换硬值之前检查其输出。

关于PHP MySQL group by unix Timestamp 用于报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33363786/

相关文章:

php - 从多个选择值中获取所有 $_POST

php - MySql 的 ID 值在 while 循环中丢失

mysql - 当在 mysql 5.6 严格 sql 模式下不起作用时,按情况分组

javascript - sql语法错误mysql Node js?

php - 当我在 Laravel 中的 mysql 原始查询的 LIMIT 部分使用绑定(bind)时,为什么会出现 SQLSTATE[42000] 错误?

php - 如何使用分隔符逐行显示来自 Mysql 数据库的数据?

php - 如何在 MySQL Select 语句中使用 BETWEEN 的 PHP 数组?

php - 如何在下一个查询中使用 jQuery AJAX .done 变量

PHP 使用准备语句插入查询

mysql - 使用准备好的查询在存储过程中创建多个临时表不起作用