繁体   English   中英

如何在for循环中获取给定月份所有天的记录总数

[英]How do i get total number of records for all days of a given month inside a for loop

如何在for循环中获取给定月份所有天的记录总数,即

可以说,在31天的一个月内,我希望我的结果看起来像

2 0 0 5 0 4 0 0 0 1 3 0 8 0 76 0 7 6 0 0 4 0 0 0 7 0 0 55 0 0 7

这就是我尝试过的

for( $day = 1 ; $day <= $totaldays ; $day++ ) 
{
$result = mysqli_query($link,"SELECT  count(*) FROM tablex WHERE DAY(date_c) = '$day'") or die(mysqli_error($link));
$row = mysqli_fetch_array($result, MYSQLI_NUM);     
$values[$row[0]] = (int)$row[1];

echo $values[$row[0]]; 
}

我的SQL查询可能出什么问题了?

$result = mysqli_query($link,"SELECT  count(*) FROM tablex WHERE DAY(date_c) = '$day'") or die(mysqli_error($link));

由于我得到的结果是

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

我数据库中的日期格式为时间戳,即2017-07-02 00:00:28

我还尝试添加$ dtb = date(“ Ym- $ days”); 在for循环内,并将其添加到SQL ..WHERE DAY(date_c)='$ dtb'“)..但仍然没有任何值。

另外,mysql查询中DAY(date_c)的实际格式是什么?

您的代码期望结果集中有两列。 要么做:

 $values[i] = (int)$row[0];

或返回日期和值:

SELECT $day as dy, count(*) FROM tablex WHERE DAY(date_c) = '$day'

首先,尝试删除$ day附近的' 当您在$ day附近使用'时,请求尝试匹配DAY(date_c)='1'而不是DAY(date_c)= 1。

您的行应如下所示: $result = mysqli_query($link,"SELECT count(*) FROM tablex WHERE DAY(date_c) = $day") or die(mysqli_error($link));

通常,在一个循环中触发SQL请求不是最好的主意,它很慢,当您需要更大范围的数据(例如一年)时会更慢,否则会带来其他问题。 根据您的桌子设计,您可能会做类似的事情

SELECT DAY(date_c) AS day_num, count(*) AS day_record
FROM tablex 
GROUP BY DAY(date_c)
ORDER BY DAY(date_c)

然后,您将所有结果归入一个请求。 您需要遍历结果并将其打印出来,这在PHP中比在数据库中调用31倍要快得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM