在数据库模型管理中,新增三个字段:DayHits、WeekHits 和 MonthHits。这三个字段均为整数类型(int),并且位于主表中。此外,还需要增加一个名为 ConditionHits 的字段,该字段为文本类型,同样位于主表中。请注意字段名称的大小写。
以下是一个示例代码,用于实现根据日期更新点击量的功能:
$time = mktime(0, 0, 0, 8, 5, 2010); // 设置日期为2010年8月5号
$wzid = 35; // 文章ID为35
$Week = date("w", $time); // 获取今天是星期几
$Number = date("j", $time); // 获取今天是几号
$Month = date("m", $time); // 获取今天是几月
$Years = date("Y", $time); // 获取今天是哪一年
$d = cal_days_in_month(CAL_GREGORIAN, $Month, $Years); // 获取本月总天数
$Week_r = $Number - $Week; // 计算本周日是几号
if ($Week_r < 1) {
$Week_r = cal_days_in_month(CAL_GREGORIAN, $Month - 1, $Years) + $Week_r;
}
$Week_l = $Number + 7 - $Week - 1; // 计算本周六是几号
if ($Week_l > $d) {
$Week_l = $Week_l - $d;
}
$newsrs = $empire->fetch1("select ConditionHits from {$dbtbpre}ecms_news where `id`={$wzid}");
$DayHitstime_k = mktime(0, 0, 0, date("m", $time), $Number, date("Y", $time));
$DayHitstime_j = $DayHitstime_k + 86400;
if (empty($newsrs['ConditionHits'])) { // 判断月、周、日点击条件是否为空,如果为空,则设置初始值
$empire->query("UPDATE `{$dbtbpre}ecms_news` SET `ConditionHits`='" . $Number . "|" . $Week_r . "-" . $Week_l . "|" . $Month . "',`DayHits`=1,`WeekHits`=1,`MonthHits`=1 WHERE `id`={$wzid}");
} else {
$Daytj = explode("|", $newsrs['ConditionHits']);
print_r($Daytj);
if ($newsrs['ConditionHits'] != "" . $Number . "|" . $Week_r . "-" . $Week_l . "|" . $Month . ") {
if ((int)$Daytj[0] != $Number) {
$empire->query("UPDATE `{$dbtbpre}ecms_news` SET `ConditionHits`='" . $Number . "|" . $Daytj[1] . "|" . $Daytj[2] . "',`DayHits`=0 WHERE `id`={$wzid}");
}
if ($Daytj[1] != "" . $Week_r . "-" . $Week_l . "") {
$empire->query("UPDATE `{$dbtbpre}ecms_news` SET `ConditionHits`='" . $Daytj[0] . "|" . $Week_r . "-" . $Week_l . "|" . $Daytj[2] . "',`WeekHits`=0 WHERE `id`={$wzid}");
}
if ((int)$Daytj[2] != (int)$Month) {
$empire->query("UPDATE `{$dbtbpre}ecms_news` SET `ConditionHits`='" . $Daytj[0] . "|" . $Daytj[1] . "|" . $Month . "',`MonthHits`=0 WHERE `id`={$wzid}");
}
} else {
if ((int)$Daytj[0] == $Number) {
$empire->query("UPDATE `{$dbtbpre}ecms_news` SET `DayHits`=DayHits+1 WHERE `id`={$wzid}"); // 今日点击+1
}
if ($Daytj[1] == $Week_r . "-" . $Week_l) {
$empire->query("UPDATE `{$dbtbpre}ecms_news` SET `WeekHits`=WeekHits+1 WHERE `id`={$wzid}"); // 本周点击+1
}
if ((int)$Daytj[2] == (int)$Month) {
$empire->query("UPDATE `{$dbtbpre}ecms_news` SET `MonthHits`=MonthHits+1 WHERE `id`={$wzid}"); // 本月点击+1
}
}
}
上述代码的功能是根据当前日期更新文章的点击量统计信息。具体来说:
- DayHits:记录每日点击量。
- WeekHits:记录每周点击量。
- MonthHits:记录每月点击量。
- ConditionHits:用于存储与日期相关的条件信息,格式为“日|周范围|月”。例如,“5|1-7|8”表示5号,本周从1号到7号,以及8月。
通过这种方式,可以精确地统计每篇文章在不同时间维度上的点击情况,从而为数据分析提供支持。