【问题标题】:How to group and show multiple resultset row values within a single table cell?如何在单个表格单元格中分组和显示多个结果集行值?
【发布时间】:2018-08-05 16:35:40
【问题描述】:
<?php
include("functions/functions.php");
$con=mysqli_connect("localhost", "root", "", "db_stvs");
$query="select * from tbl_preset_position where pp_status='Active'";
$query1="select distinct pp_name from tbl_preset_position where pp_status='Active'";
$res=mysqli_query($con, $query);
$res1=mysqli_query($con, $query1);
?>
<button class="btn btn-primary">Back</button>
<button class="btn btn-primary" data-toggle="modal" data-target="#addModal">Add Position Preset</button>

<table class="table-bordered">
    <th>Preset Name</th>
    <th>Positions Available</th>
    <?php
    while ($row1 = mysqli_fetch_assoc($res1)) {
    ?>
        <tr>
            <td>
                <?php echo $row1['pp_name'];?>
            </td>
            <td>
            <?php
            while ($row= mysqli_fetch_assoc($res)) {
                if($row['pp_name']==$row1['pp_name']) {
                    echo $row['pp_position']."<br>";
                }
                ?>
                <?php
            }
            echo "</td></tr>";
    }
    ?>
</table>

我可以显示第一行及其位置,但是当涉及到其他行时,没有数据显示。

我只是想在正确的预设名称上显示某个位置。 例如:-

" Sample preset has 3 Positions 
"Sample Preset| President, Vice PResident" 
"Sample Preset 2| Supremo, Ala Supremo"

【问题讨论】:

  • 是的,我也认为我可以使用 group by 来做到这一点,但它不会显示来自某个预设名称的重复数据

标签: php html mysqli


【解决方案1】:

最明智的是,您应该在查询中使用GROUP BYGROUP_CONCAT() 来完全准备好结果集。

类似这样的:(未经测试)

SELECT pp_name, GROUP_CONCAT(pp_position SEPARATOR '<br>') AS pp_position
FROM tbl_preset_position
WHERE pp_status = 'Active'
GROUP BY pp_name
ORDER BY pp_name

然后您可以将数据正常回显到您的表格中。


否则,您将需要使用复杂的 php 来确定哪些行应该有附加数据,哪些行可以独立...

现在,我还没有测试过这段代码,但我相信条件逻辑应该成立。您只需要 ORDER BY pp_name 然后在迭代结果集时检查新的 pp_name 值以确定您是否显示组中的第一个。

我对查询函数使用 OO 语法,因为它不那么冗长。

<?php
include("functions/functions.php");

echo '<button class="btn btn-primary">Back</button>';
echo '<button class="btn btn-primary" data-toggle="modal" data-target="#addModal">Add Position Preset</button>';

if (!$con = new mysqli("localhost", "root", "", "db_stvs")) {
    echo 'Connect failed: ', $con->connect_error);  // never display errors to the public
} elseif (!$result = $con->query("SELECT pp_name, pp_position FROM tbl_preset_position WHERE pp_status = 'Active' ORDER BY pp_name")) {
    echo 'Syntax Error', $con->error;  // never show the exact error message to the public
} elseif (!$result->num_rows) {
    echo 'No Active Records Found';
} else {
    echo '<table class="table-bordered">';
        echo '<tr><th>Preset Name</th><th>Positions Available</th></tr>';
        $name = null;                                                            // establish a default value that won't be matched
        while ($row = $result->fetch_assoc()) {
            if ($row['pp_name'] !== $name) {
                if ($name !== null) {
                    echo '</td></tr>';
                }
                echo "<tr><td>{$row['pp_name']}</td><td>{$row['pp_position']}";  // write row for pp_name group
            } else {
                echo "<br>{$row['pp_position']}";                                // append all subsequent values in group
            }
            $name = $row['pp_name']; // update temporary variable
        }
        echo '</td></tr>';
    echo '</table>';
}

【讨论】:

    猜你喜欢
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多