php - PHP 循环数组逻辑错误

标签 php mysql arrays logic

解释起来有点复杂,尤其是在标题中 - 所以这里是:

我正在制作一个包含 12 个索引的 PHP 数组,每个索引每个月一个 - 每个月都会显示当月记录的页面浏览量,为了获取月份,我使用当前的 UNIX 时间并采取距离 2629743 秒(一个月),每次循环时,都会添加 2629743 秒 - 然后这应该生成数组,例如 (1, 4, 5, 9) 1 月 1 个 View ,2 月 4 个 View 等。

如果没有 View ,我需要它像 (null, null, 9) 这样,所以一月没有 View ,二月没有 View ,三月 9 - 但索引完全困惑, View 的顺序错误.

循环代码:

$Month = 1; // Start with January
$MonthTimestamp = 2629743; // Start with the time of ONE month from current time
$ArrayTimeStamp = array();
while ($Month <= 12): // Go from January to February 

$Value1 = $now - $MonthTimestamp;
$ViewsThisMonth = mysqli_fetch_object(mysqli_query($db, "SELECT SUM(Views) AS NumberFinalViews FROM BlogViews WHERE TimeRecord >= '$Value1' AND TimeRecord < '$now'"));
$ArrayTimeStamp[] = $ViewsThisMonth->NumberFinalViews;
$MonthTimestamp = $MonthTimestamp + 2629743;
$Month++;
endwhile;

重申一下,数组需要存储每个月的页面浏览量,这些页面浏览量存储在数据库中,所有页面浏览量都存储有时间戳,这些时间戳需要分成 12 个月,然后放入数组。

二月的 4 个 View 需要位于第二个索引中,并且时间戳将大于一月的时间戳但小于三月。

感谢所有帮助!!

编辑: $now 是当前 UNIX 时间(以秒为单位)。

最佳答案

  1. 您应确保包含时间相关数据的列是 DATETIMETIMESTAMP 列。这将使基于时间的查询变得更加容易。

  2. 您可以将在 PHP 中实现的逻辑移至查询本身:

      SELECT SUM(Views) AS NumberFinalViews,
             EXTRACT(YEAR_MONTH FROM TimeRecord) AS YearMonth
        FROM BlogViews
       WHERE TimeRecord BETWEEN '$startMonth' AND '$endMonth'
    GROUP BY YearMonth
    

    如果TimeRecord只是一个表示UNIX时间戳的整数,则需要将其转换:

     ...
     EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(TimeRecord)) AS YearMonth
    

    这会返回一个包含字段 YearMonth 的结果,该字段的值类似于 201609(2016 年 9 月),以及其中的观看次数期间,已经预先分组。您只需将 $startMonth$endMonth 设置为您查询的整个时间段的绝对分隔符,无需为每个月单独执行此操作。

关于php - PHP 循环数组逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39330307/

相关文章:

javascript - 将文本文件读入 Typescript 中的对象数组中

php - CakePHP:调用非对象上的成员函数 find()

具有不同执行计划的 MySQL Master 和 Slave

php - 显示大量带有类的表单行

php - 如何借助 MySQL 和核心 PHP 插入视频

php - Codeigniter 选择和(有条件的)更新查询

java - 如何从 Java 中的 TreeMap 中获取值?

javascript - 如何判断数组中是否只存在一项

php - PHP 5 中使用 mysql_query() 的调用是异步的吗?

php - 如何更改主导航栏的颜色,我无法通过 CSS 或 PHP 访问它