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

标签 php mysql loops

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

相关文章:

php - 使用 PHP 从逗号分隔的字符串创建 JSON

php - 使用主管的 Laravel 5.8 异步队列问题

php - 将复选框数组分配给变量

MySQL更新连接查询解决重复值

mysql - 为什么 COUNT() 只显示一行表格?

python - 如何在 Python 中循环遍历 JSON

php - for & while循环条件比较

php - PDO:交易不回滚?

mysql - 有没有一个技巧可以让 MySQL 在 UPDATE 语句的 SET 子句中使用 "ignore"结尾的逗号?

java - 将二维数组值更改为零