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

时间:2017-08-06 17:11:47

标签: php mysql sql date

如何在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 0 0

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

我还尝试在for循环中添加 $ dtb = date(&#34; Ym- $ days&#34;); 并将其添加到SQL .. WHERE DAY(date_c)=&#39; $ dtb&#39;&#34;).. ,但我仍然没有得到任何值。

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

2 个答案:

答案 0 :(得分:1)

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

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

或返回当天的值:

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

答案 1 :(得分:1)

首先,尝试在$ $周围删除'。当您在$ 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)

然后,您将所有结果都放在一个请求中。你需要遍历结果并打印它,这比在数据库调用31倍时在PHP中快得多。