嵌套的PHP while循环在显示请求的结果之前返回以前的结果
我正在使用PHP中的双while循环,以分组方式显示来自MySQL数据库的结果。这是我的数据库结构的一个示例: 识别团队国家/地区的名称嵌套的PHP while循环在显示请求的结果之前返回以前的结果,php,mysql,loops,Php,Mysql,Loops,我正在使用PHP中的双while循环,以分组方式显示来自MySQL数据库的结果。这是我的数据库结构的一个示例: 识别团队国家/地区的名称 1汉密尔顿梅赛德斯英国 双按钮迈凯轮英国 3阿隆索迈凯轮es 4佩雷斯迈凯轮mx 我希望它按如下方式分组显示: ES Alonso MX Perez UK Button Hamilton 但是,我的嵌套循环没有比这更好的了: ES Alonso MX Alonso Perez UK Alonso Per
1汉密尔顿梅赛德斯英国
双按钮迈凯轮英国
3阿隆索迈凯轮es
4佩雷斯迈凯轮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') . '";');
}
根据您得到的信息,看起来您只需要在内部循环之前将$drivers\u bits
初始化为空字符串
$drivers_bits = '';
while ($content = $db->fetch_array($custom)) { ...
$drivers\u bits
可能用于获取模板('cms\u drivers')
,您每次都会向其添加值,而不是将其重置为循环迭代的新值。这里的内容有点难说。看起来您没有对$content
执行任何操作,除非它在fetch\u template()
中与global
一起使用。process()
是否在内部使用eval?是的,process()在内部使用eval,并且在关联模板中使用$content$content[name]确实删除了重复项,但现在每个组只显示一个结果。ES的结果数(一个结果)也限制了MX和UK的显示结果数,这两种方法都非常有效!我尝试重新初始化$content和$custom,但都没有用,我从来没有想过要用$drivers\u位来尝试它。太棒了!很高兴听到这个消息。
<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 = '';
while ($content = $db->fetch_array($custom)) { ...