Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌套的PHP while循环在显示请求的结果之前返回以前的结果_Php_Mysql_Loops - Fatal编程技术网

嵌套的PHP while循环在显示请求的结果之前返回以前的结果

嵌套的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

我正在使用PHP中的双while循环,以分组方式显示来自MySQL数据库的结果。这是我的数据库结构的一个示例:

识别团队国家/地区的名称
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)) { ...