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

时间:2014-10-02 15:52:23

标签: 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

我想首先通过GROUP BYmodel_body值输出HTML中的表内容,并仅列出带有循环的唯一循环列表,然后使用第二个循环列表列出所有可用的{{1}每个uqniue variant的值。

model_body

我写的PHP代码就是这个,我尝试了几种不同的可能性,但总是会出现某种不匹配的情况:

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 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 1}},其余的都是空白的。

我的SQL查询如下:

model_body

以下是$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); 查询的SQL小提示,如果此服务器为任何内容: http://sqlfiddle.com/#!2/96044/3

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

修改 这会对问题有所启发,但仍无法在我的代码中使用它: http://board.phpbuilder.com/showthread.php?10373392-RESOLVED-Nested-While-Loops-and-mySQL 谢谢!

2 个答案:

答案 0 :(得分:0)

为什么不让sql做你所有的工作?您只需要一个查询。此查询获取您想要的表,然后您可以在php中使用一个循环来浏览记录:)

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

答案 1 :(得分:0)

这是我最终解决的解决方案 - 如果它可以帮助任何人:

<?php while (!$rs_main_model->EOF)   { ?>                   
    <div>               
        <div>        
            <h2<?php echo $rs_main_model->fields['model']; ?></h2>
   <?php $sql_variant = "SELECT * FROM tbl_catalog WHERE model_body = '".$rs_main_model->fields['model_body']."'"; $rs_variant = $db -> Execute($sql_variant); ?>
        </div>                                    
        <div>      
                  <?php while (!$rs_variant->EOF) { ?>           
                  <?php echo $rs_variant->fields['variant']; ?>
                  <?php $rs_variant->MoveNext(); } ?>
            </div>
    </div>
<?php $rs_main_model->MoveNext(); } ?>