如何在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)的实际格式是什么?
答案 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中快得多。