我试图在我的网站上每天计算唯一身份访问者。 这是我制作的剧本:
<?php
require_once 'database.php';
$dateQuery = $db->prepare("SELECT count(*) AS hits FROM tracked GROUP BY DATE(date), hostadrr");
$dateQuery->execute();
$rows = $dateQuery->fetchAll(PDO::FETCH_ASSOC);
$array = array();
foreach ( $rows as $row ) {
$array[] = [(int)$row['hits']];
}
$json = json_encode($array);
echo $json;
?>
我从json_encode得到的这个数组是这样的: [[3],[1],[1],[2],[10],[3],[1],[2]]
数组中有8个数组是正确的,这代表每一天。但每个数组中的数字只是我网站上点击的总数,而不是按用户的主机地址分组。我在这做错了什么?数组应该是:[[1],[1],[1],[1],[1],[1],[1],[1]](因为我自己测试它电脑;))
答案 0 :(得分:0)
首先,始终尝试将代码删除到最小的问题。例如,不要混淆JSON编码,PHP和MySQL,并且感到惊讶,结果不是你的样子。
从SQL查询开始:
SELECT count(*) AS hits FROM tracked GROUP BY DATE(date), hostadrr
您是否尝试在控制台或phpMyAdmin中运行该程序?是否显示正确的结果?
我猜不会。为什么?因为此查询仅返回多个匹配而与日期或主机地址无关。因此,即使您说数据在一天中的总点击数是正确的,您甚至无法确定它是否是正确的订单,或者它是否会在没有任何点击的情况下遗漏数天。
由于您没有提供SQL架构,我只能假设一个。但是你的查询至少应该是这样的:
SELECT
date AS date,
hostadrr AS host,
count(*) AS hits
FROM
tracked
GROUP BY
DATE(date),
hostadrr
ORDER BY
date ASC
现在,您将获得每个日期/主机组合的一行以及相应的命中数,您可以将其分配给数组,即
$array[$row['date']][$row['host]] = (int) $row['hits'];