【发布时间】:2019-01-16 00:11:32
【问题描述】:
对于标题描述,我深表歉意,因为我不确定如何最好地描述这一点。
有多台计算机,每台计算机有多个用户,每个用户有多个数据日志。我想获取每台计算机的最新数据日志。
我现在意识到下面的查询没有提供正确的数据,因为 ORDER BY 发生在结果中,而 GROUP BY 没有特定的顺序。
我在发布此内容之前确实阅读了此内容,似乎需要一个子查询,然后在同一张表上再次加入该结果以获取其余行列值(发现是最新的那个) .我发现的示例虽然非常基本,但不涉及连接其他表。似乎我还必须这样做两次,因为我希望它按计算机分组......(一次用于按 user_id 分组的 data_logs 并获得最大值,然后另一个按 computer_id 分组以获得早期结果的最大值)或者我在那里错了.
需要一些帮助来掌握如何解决这个问题以及解决方法。
$stmt = $db->prepare("
SELECT
computers.computer_name,
users.username,
data_logs.window_title,
data_logs.filename,
data_logs.capture_timestamp
FROM computers
INNER JOIN users
ON users.computer_id = computers.computer_id
INNER JOIN data_logs
ON data_logs.user_id = users.user_id AND data_logs.marked != 1
WHERE computers.account_id = :cw_account_id AND computers.status = 1
GROUP BY computers.computer_id
ORDER BY data_logs.capture_timestamp desc
");
$binding = array('cw_account_id' => 1721);
$stmt->execute($binding);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "<pre>";
print_r($results);
echo "</pre>";
【问题讨论】:
标签: mysql pdo group-by sql-order-by greatest-n-per-group