如何在 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>';
}
我正在学习 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>';
}