这有点难以解释,特别是在标题中 - 所以这里是:
我正在创建一个包含12个索引的PHP数组,每个月一个 - 每月将显示当月记录的页面查看次数,获得月份,我正在使用当前的UNIX时间和服用离开2629743秒(一个月),每次循环四处,增加2629743秒 - 这应该生成数组,如Jan(1,4,5,9)1视图,2月4视图等。
如果没有视图,我需要它像(null,null,9)所以1月没有视图,3月9日没有视图 - 但索引完全搞乱,视图输入错误
循环代码:
$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个月,然后放入阵列。
2月份的4个视图需要位于第二个索引中,时间戳将大于1月份的时间戳,但小于3月份。
所有帮助赞赏!!
编辑: $ now是当前的UNIX时间(以秒为单位)。
答案 0 :(得分:0)
您应确保包含与时间相关的数据的列为DATETIME
或TIMESTAMP
列。这将使基于时间的查询更容易。
您可以将您在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月),而该期间的Views
已经预先分组。您只需将$startMonth
和$endMonth
设置为您查询的整个期间的绝对分隔符,无需每个月单独执行。