【问题标题】:Create array in GROUP BY在 GROUP BY 中创建数组
【发布时间】: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 子句中列出的字段。 * 涵盖的所有其他内容都应视为垃圾数据。

标签: php arrays mysqli


【解决方案1】:

可能有点hacky,但它有效。只需 GROUP_CONCAT 值,然后将它们放入 $row 变量中,您就可以将它们分解为数组。

select *, GROUP_CONCAT(CONVERT(point,CHAR)) as all_points from fb_score GROUP BY userid

【讨论】:

  • 完美...像魅力一样工作:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 2019-05-20
  • 2019-10-09
  • 1970-01-01
  • 2014-09-28
  • 2014-08-24
  • 1970-01-01
相关资源
最近更新 更多