【问题标题】:How do i get total number of records for all days of a given month inside a for loop如何在for循环中获取给定月份的所有天的记录总数
【发布时间】:2017-08-06 17:11:47
【问题描述】:

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

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

我还尝试在 for 循环中添加 $dtb = date("Y-m-$days"); 并将其添加到 SQL ..WHERE DAY(date_c) = '$dtb'").. 但我仍然没有得到任何值。

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

【问题讨论】:

  • 为什么不使用 group by?
  • @ZoharPeled 我想在图表中使用结果,所以我还需要当天没有计数的零(0)值
  • 所以?左连接到日历表。我不是 MySql 人,所以我不能给你确切的答案,但逻辑仍然相同 - 创建一个日历表,将它与你的数据表的左连接一起使用,然后你会得到 0 计数错过的日子。

标签: php mysql sql date


【解决方案1】:

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

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

或者返回日期和值:

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

【讨论】:

    【解决方案2】:

    首先,尝试删除 $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 倍 DB 快得多。

    【讨论】:

    • 看起来很有趣,让我试一试
    • @gordon-linoff 也是对的,我没有识别出$row[1] 错误:)。 SQL 结果从 0 开始计数,大多数数组也是如此。
    • 在你的第二个解决方案中,因为你不鼓励循环,你从哪里得到变量 $day in WHERE DAY(date_c) = $day。 ?
    • 对不起,我的错误。您不再需要 $day 变量,也不需要循环。尝试在 phpmyadmin 或 SQL Workbench 等工具中发送 SQL 请求以查看结果。
    • 它很好,但它会跳过零值,这也是所需结果的一部分
    猜你喜欢
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多