php - 嵌套 while 循环不适用于我的 GROUP BY 查询

标签 php mysql select while-loop group-by

我有点被 while 循环困住了,需要一些帮助来找到错误的代码。

我的 SQL 表看起来像这样:

make     model       model_body     variant   
M1       A           ooo            Va1    
M1       B           sss            Va2    
M1       B           sss            Va3    
M1       A           ooo            Va4
M1       A           ooo            Va5    
M1       B           jjj            Va6   
M1       A           www            Va7

我想首先通过对 model_body 值执行 GROUP BY 来输出 HTML 中的表内容,并仅列出具有循环的唯一值,然后使用第二个循环列出每个 uqniue model_body 的所有可用 variant 值。

The output should look something like this:   However what I end up with is this:    

ooo    Va1                                    ooo    Va1
       Va4                                           Va4
       Va5                                           Va5
www    Va7                                    www              
sss    Va2                                    sss                
       Va3
jjj    Va6                                    jjj              

我编写的 PHP 代码就是这个,我尝试了几种不同的可能性,但总是以某种不匹配结束:

<?php while (!$rs_main_model->EOF)   { ?>                   
        <div>               
            <div>        
                <h2<?php echo $rs_main_model->fields['model']; ?></h2>
            </div>                                    
            <div>      
                      <?php while (!$rs_variant->EOF) { ?>                                  
                      <?php echo $rs_variant->fields['variant']; ?>
                      <?php $rs_variant->MoveNext(); } ?>
                </div>
        </div>
  <?php $rs_main_model->MoveNext(); } ?>

重要的是,如果我放置一些文本而不是第二个循环,则文本会出现在每个 model_body 上,但是当循环完成时,会出现 variant 值仅适用于第一个 model_body,其余均为空白。

下面列出了我的 SQL 查询:

$catalogue_make =  $_GET['m'];

$sql_all_models =  "SELECT * FROM tbl_catalog WHERE make = '$catalogue_make'"; 
$rs_all_models  =  $db -> Execute($sql_all_models);    

$sql_main_model     = "SELECT * FROM tbl_catalog 
                        WHERE make = '".$rs_all_models->fields['make']."' 
                        GROUP BY model_body";
$rs_main_model  =  $db -> Execute($sql_main_model);    

$sql_variant        = "SELECT * FROM tbl_catalog 
                        WHERE model_body = '".$rs_main_model->fields['model_body']."'";
$rs_variant     =  $db -> Execute($sql_variant);

这里是一个 GROUP BY 查询的 SQL fiddle (如果此服务器用于任何内容): http://sqlfiddle.com/#!2/96044/3

我不确定这是否应该通过第二个循环来实现,因此任何如何完成这项工作的建议将不胜感激。

编辑 这揭示了问题的一些情况,但仍然无法让它在我的代码中工作: http://board.phpbuilder.com/showthread.php?10373392-RESOLVED-Nested-While-Loops-and-mySQL 谢谢!

最佳答案

为什么不让 sql 来完成你所有的工作呢?您只需要一个查询。此查询获取您想要的表,然后您只需使用 php 中的一个循环即可遍历记录:)

SELECT model_body, variant FROM tbl_catalog WHERE make = 'M1' GROUP BY model_body, Variant;

关于php - 嵌套 while 循环不适用于我的 GROUP BY 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26164640/

相关文章:

php - 覆盖 laravel 验证消息

php - Codeigniter 蓝色调

php - 捕获和重新抛出异常的最佳实践是什么?

jquery 从选定的选项中定位 val,然后显示相应的 div

javascript - Yii2 从 js 脚本在页面上的 vendor 文件夹中添加图像、css、js 文件

javascript - 编辑表格行

Mac OS X 上的 mysql 帐户

php - 如何使用php和mysql从一个表中搜索另一个表中是否存在记录

php - 找出 SQL 数据库中某个值的 "ranking"

sql - 存储过程没有数据输出(Postgresql)