首页 > 解决方案 > 如何使用php/mysql进行多类数据的选择和显示

问题描述

我试图创建一个类似于运动表的表。此表中有 8 个组。(AH) 每组有 4 支队伍。我尝试使用下面的 SQL 代码选择所有团队,并按组名对其进行排序

SELECT *
FROM teams
ORDER BY groupName

我希望结果显示在包含 html 表的面板中。下面的代码:

<?php
    while($row = $result->fetch_assoc()){
?>
        <div class="flip">
            <h3>Group <?php echo($row['groupName']);?></h3>
        </div>
        <div class="panel">
            <table>
                <thead>
                    <tr>
                        <th>#</th>
                        <th>Team</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td><?php echo($row['team_pos']); ?></td>
                        <td><?php echo($row['teamName_Pr']); ?></td>
                    </tr>
                </tbody>
            </table>
        </div>
    <?php
        }
    ?>

但是随着 while 循环的每次重复,每个团队的组名都会重复。如何在特定表格中显示所有组团队?此外,当我使用 GROUP BY 而不是 ORDER BY 时,每组只显示一个团队。

我的连接方式是mysqli。

标签: phpmysqli

解决方案


您需要按groupName. 不要使用GROUP BY,因为它不会返回所有行。

<?php

//$result = ...

$groups = [];

while($row = $result->fetch_assoc()){
    @$groups[$row['groupName']][] = $row;
}

foreach ($groups as $groupName => $rows) {
?>
    <div class="flip">
        <h3>Group <?php echo($groupName);?></h3>
    </div>
    <div class="panel">
        <table>
            <thead>
                <tr>
                    <th>#</th>
                    <th>Team</th>
                </tr>
            </thead>
            <tbody>
                <?php 
                foreach ($rows as $row) {
                ?>
                    <tr>
                        <td><?php echo($row['team_pos']); ?></td>
                        <td><?php echo($row['teamName_Pr']); ?></td>
                    </tr>
                <?php
                }
                ?>
            </tbody>
        </table>
    </div>
<?php
}

顺便说一句,请考虑使用模板引擎。


推荐阅读