【发布时间】:2017-03-22 11:47:29
【问题描述】:
我正在制作一个高尔夫排行榜,其中我从特定的 matchid 中获取所有球洞得分,并按用户 ID 对它们进行分组。这部分工作得很好。
我是这样做的:
$playersArray = array();
$sql = "SELECT *, SUM(point) AS points, COUNT(*) AS holes, COUNT(*)*2-SUM(point) AS topar FROM fb_score WHERE matchid=$matchid GROUP BY userid";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()){
$playersArray[] = $row;
}
}
现在,我的问题是,有没有一种方法可以为每个用户创建一个包含所有“点”的数组并将其放入 $row 中?
假设 SUM(point) 由 3 个点 (3, 5, 4) 相加。我可以在结果中得到这个。现在我只为每个用户获取最新的 $row,但添加了“points”、“holes”和“topar”。
希望这个问题有意义:-/
任何帮助表示赞赏并提前感谢:-)
【问题讨论】:
-
$row['point'] 不是你想要的?
-
@user2078421 不,这是该组中的“最后一个”匹配项,而不是每行所有匹配项的总和。
-
@user2078421 我想在最终结果中创建 $row[point] 和数组。有道理?也许创建一个新的 $row[pointsarray] = array(allpoints by user)
-
我认为您需要在单独的查询中执行此操作。在 $playersArray[] 你有用户 ID,所以选择所有的点
-
这是因为奇怪地允许
SELECT * ... GROUP BY userid的语法。有一个聚合查询,只能依赖于聚合的字段,或者在GROUP BY子句中列出的字段。*涵盖的所有其他内容都应视为垃圾数据。