我有一个网站页面访问数据库,每次访问都有一个唯一的 ID,但如果访问者在访问期间查看多个页面,则每个页面 View 都会共享访问 ID。
下面的表结构,
`id` int(10) NOT NULL AUTO_INCREMENT,
`client_id` int(11) NOT NULL,
`url` text NOT NULL,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`timedate` datetime NOT NULL,
`visit_id` varchar(100) NOT NULL,
`url1` varchar(255) NOT NULL,
`page_time` time NOT NULL,
`type` varchar(50) NOT NULL,
下面是我页面屏幕截图的链接,正如您现在所看到的,所有访问都列在单个框中,我想要做的是将结果分组到共享相同访问 ID 的 block 中。
http://www.lst-technologies.co.uk/pageviews.html
我尝试过以下代码:
SELECT * FROM $tableName WHERE client_id='$client_id' AND visit_id ='$id' GROUP BY visit_id LIMIT $start, $limit
但这只是对结果进行分组,但仅显示一个条目。
当前显示代码
SELECT * FROM $tableName WHERE client_id='$client_id' AND visit_id ='$id' LIMIT $start, $limit
最佳答案
您对 GROUP BY
的用途有一个基本的误解。它不是用于将相关行收集在一起,而是用于在使用诸如 COUNT()
、SUM()
和 MAX()
。
要将相关行放在结果中,请使用 ORDER BY
,将您关心的列设置为排序列表中的第一列,例如
ORDER BY visit_id, timedate
如果您只想在输出中显示一次访问 ID,则处理结果的 PHP 循环应包含如下内容:
if ($row['visit_id'] != $last_visit_id) {
$last_visit_id = $row['visit_id'];
echo "Visit ID: $last_visit_id\n";
}
关于php - 按 ID 将 mysql 结果分组在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17287079/