我正在PHP中进行一个double while循环,以分组方式显示MySQL数据库的结果。这是我的数据库结构的一个示例:
id名称小组国家/地区
1汉密尔顿奔驰英国
2 Button McLaren英国
3阿隆索·麦克拉伦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>
答案 0 :(得分:0)
根据得到的结果,您似乎只需要在内部循环之前将$drivers_bits
初始化为空字符串即可。
$drivers_bits = '';
while ($content = $db->fetch_array($custom)) { ...
$drivers_bits
可能用在fetch_template('cms_drivers')
中,并且您每次都在其上附加值,而不是将其重置为该循环迭代的新值。