报告的PHP MySQL组(按unix时间戳)

报告的PHP MySQL组(按unix时间戳),php,mysql,Php,Mysql,我有一张tbl_新闻表格,我想在今天、本周、本月为我们制作几份报告 我已将时间存储在“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"; $que

我有一张tbl_新闻表格,我想在今天、本周、本月为我们制作几份报告

我已将时间存储在“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的date-time列,而不是表示时间的整数。 所以我的第一个建议是检查这个输出:

 $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工具来帮助您构造有效的查询,并在用变量替换硬值之前检查其输出。

在组中可能会出现问题,只需将
DATE(FROM_UNIXTIME(tbl_news.news_adate))
放入select并检查打印内容。我猜它只返回两个dateyes,但它应该返回3个dates在一个旧数据库中,只是尝试创建一个报告页。然后从删除where日期开始,并查看输出。。。也可以将开始时间改为00:00:00,而不是00:00:01完成,但仍然有2个日期,而不是3个。任何其他查询都可以得到它吗?查询是:选择count(nid)、news_adate FROM tbl_news WHERE(news_adate介于'1445797800'和'1446402599'之间)和tbl_news.news_status=1 groupby DATE(FROM_UNIXTIME(tbl_news.news_adate)),输出是count(nid)news_adate 1 1445740 98045 1445911020如果需要使用,请在时间边缘加上一天。或者使用“Where news_adate=”、“$last.”