我正在 PHP 中使用双 while 循环来以分组方式显示 MySQL 数据库的结果。这是我的数据库结构的示例:
id name team country
1 Hamilton mercedes uk
2 Button mclaren uk
3 Alonso mclaren es
4 Perez mclaren mx
我希望它像这样分组显示:
ES
Alonso
MX
Perez
UK
Button
Hamilton
但是我的嵌套循环没有比这更好的了:
ES
Alonso
MX
Alonso
Perez
UK
Alonso
Perez
Button
Hamilton
我的循环在某个地方失败了,或者我只是采取了错误的方法。我尝试了增量、非嵌套循环、重置变量、继续/中断,但我无法弄清楚。第一个循环是打印每个分组的表结构。这是我的代码示例:
<?php
// count unique country entries
$categories = $db->query("
SELECT DISTINCT country
FROM cms_drivers
WHERE team = '$team'
ORDER BY country
");
while ($cat = $db->fetch_array($categories)) { // loops 3 times
$custom = $db->query("
SELECT id, name, team, country
FROM cms_drivers
WHERE team = '$team' AND country = '$cat[country]'
ORDER BY name
");
while ($content = $db->fetch_array($custom)) {
process('$drivers_bits .= "' . fetch_template('cms_drivers_bits') . '";');
}
process('$drivers .= "' . fetch_template('cms_drivers') . '";');
}
我是否忽略了一些非常简单的事情,或者这只是错误的方法?
cms_drivers_bits 模板:
<tr><td>$content[name]</td></tr>
cms_drivers 模板:
<table cellpadding="8" cellspacing="0" width="100%">
<thead>
<tr>
<td class="header">
<span><strong>$cat[country]</strong></span></td>
</tr>
</thead>
<tbody>
$drivers_bits
</tbody>
</table>
最佳答案
根据您得到的信息,您似乎只需要在内部循环之前将 $drivers_bits
初始化为空字符串。
$drivers_bits = '';
while ($content = $db->fetch_array($custom)) { ...
$drivers_bits
可能在 fetch_template('cms_drivers')
中使用,并且您每次都向其附加值,而不是将其重置为新值循环迭代。
关于php - 嵌套 PHP while 循环在显示请求的结果之前返回先前的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52084769/