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

时间:2018-08-29 19:26:19

标签: php mysql loops

我正在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>  

1 个答案:

答案 0 :(得分:0)

根据得到的结果,您似乎只需要在内部循环之前将$drivers_bits初始化为空字符串即可。

$drivers_bits = '';
while ($content = $db->fetch_array($custom)) { ...

$drivers_bits可能用在fetch_template('cms_drivers')中,并且您每次都在其上附加值,而不是将其重置为该循环迭代的新值。