【问题标题】:sql group by - display all rowssql group by - 显示所有行
【发布时间】:2015-05-25 15:38:54
【问题描述】:

我正在为一些好友开发一些基本的统计跟踪网站,并希望更多地组织各个玩家页面。

我的计划是根据他们玩的日期打印出单独的表格,以便他们可以更轻松地查看特定日期的游戏。

我对 php 非常陌生,并且发现了“GROUP BY”,虽然这可以按日期正确分组,但它只返回一行...有没有办法获取“GROUP BY”中的每一行?

这是我现在拥有的:

$query = "SELECT * FROM games WHERE player='$thePlayer' GROUP BY whenPlayed";

【问题讨论】:

  • 您应该使用ORDER BY 而不是GROUP BY,例如SELECT * FROM games WHERE player = '$thePlayer' ORDER BY whenPlayed ASC
  • 这是我最初的计划,但是,我在为单独的日期打印单独的表格的逻辑上苦苦挣扎。
  • 跟踪当前日期...
  • 17日进行了4场比赛,24日进行了6场比赛。当前日期真的对我没有任何用处。
  • 跟踪循环中的当前/最后一个日期,并在它发生变化时采取行动......

标签: php mysql group-by


【解决方案1】:
// Get data
$query = "SELECT * FROM games WHERE player = '$thePlayer' ORDER BY whenPlayed";
$result = $mysqli->query($query);


$data = array();
// Iterate over data, use 'whenPlayed` as a key to group your data
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
    if (!array_key_exists($row['whenPlayed'], $data)) {
        $data[$row['whenPlayed']] = array();
    }
    $data[$row['whenPlayed']][] = $row;
}

然后以列表的形式显示,例如:

<ul>
    <?php foreach ($data as $date => $games): ?>
    <li>
        <?php echo $date ?>:
        <ul>
            <?php foreach ($games as $game): ?>
            <li><?php echo print_r($game, true) ?></li>
            <?php endforeach ?>
        </ul>
    </li>
    <?php endforeach ?>
</ul>

【讨论】:

    【解决方案2】:

    尝试以这种方式首先 ORDER 您的行为 whenPlayed 升序或降序,如果您需要单个日期或其他内容的行槽,请添加 where 条件。

    $query = "SELECT * FROM games WHERE player='$thePlayer' ORDER BY whenPlayed ASC";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2022-01-04
      • 2015-08-10
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多