php - 按 ID 将 mysql 结果分组在一起

标签 php mysql

我有一个网站页面访问数据库,每次访问都有一个唯一的 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/

相关文章:

php - SQL 错误(更新 gegevens)::'1' 中的未知列 'field list'

php pdo mysql 不会返回带引号的文本

php - 为网站设置在线支付

php - 我正在为网站制作时事通讯,但它没有连接到服务器

php - 建立连接失败:PHP

mysql - 确定 n 维中点之间的距离

mysql - 如何将 SQL 数据库从 Windows 7 移动到 ubuntu

MySQL 如何在不触发修复的情况下向 innodb 表添加新的多列索引?

php - 使用产品类别作为关键字 Magento

javascript - 如何使用 jquery 将关注按钮从关注更改为关注