如何在 php 中进行记录的内部循环

How to do an inner loop of records in php

我正在学习 PHP,我想知道如何使用 PHP 中的记录进行内部循环或嵌套循环。如果有人向我解释如何在 PHP.

中执行此类循环,我将不胜感激

我在 MySQL 中有这个 table []

我只想在 PHP 中创建一个如下所示的报告 table:

到目前为止,我知道如何使用下面的代码进行当前循环,但我如何才能在同一个循环和内部循环中显示像上面的 table 这样的菜肴。我知道如何创建格式(table、空格等)我只需要 PHP 逻辑以最佳方式执行此操作。

<?php  
do {  ?>
Table in here
 <?php } while ($selecc =    mysqli_fetch_assoc($conmenu));  ?>

clean/direct 方法应该是这样的:

SELECT Client, Option, GROUP_CONCAT(Dish SEPARATOR ', ')
FROM table_name
GROUP BY Client, Option

然后在你的数据已经分组并粘合在一起的情况下,只需在结果集的一个循环中打印你的字符串。

使用 do {} while () 在这里没有任何好处。

这是一个未经测试的片段...

if ($conmenu) {
    echo '<table>';
        echo '<tr><td>Client</td><td>Option</td><td>Dishes</td></tr>';
        while ($row = mysqli_fetch_assoc($conmenu)) {
            echo '<tr><td>' , implode('</td><td>', $row) , '</td></tr>';
        }
    echo '</table>';
}

备案:

The maximum permitted result length in bytes for the GROUP_CONCAT() function. The default is 1024.

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len

此外,$conmenu 是可迭代的,因此您可以使用 foreach 而不是 while 循环。

foreach ($conmenu as $row) { ...

如果你想以艰难的方式做到这一点...

SELECT Client, Option, Dish
FROM table_name
ORDER BY Client, Option

然后...(未测试)

if ($conmenu) {
    echo '<table>';
        echo '<tr><td>Client</td><td>Option</td><td>Dishes</td></tr>';

        $group = null;
        foreach ($conmenu as $row) {
            if ($group !== $row['Client'] . '_' . $row['Option']) {
                if ($group !== null) {
                    echo '</td></tr>';
                }
                echo '<tr><td>' , implode('</td><td>', $row);
            } else {
                echo ", " , $row['Dish'];
            }
            $group = $row['Client'] . '_' . $row['Option'];  // update group
        }
        echo '</td></tr>';  // close final iteration
    echo '</table>';
}