2014-10-02 34 views
0

我有点卡住while循环,需要一些帮助来找到错误的代码。嵌套while循环不能用于我的GROUP BY查询

我的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 

我想输出HTML表的内容首先通过做GROUP BYmodel_body值而仅列出独特的人与一个循环,然后用第二循环列出每个uqniue的所有可用variantmodel_body

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小提琴,如果这服务器的任何东西: http://sqlfiddle.com/#!2/96044/3

我不知道这应该与第二实现所以任何建议如何使这项工作将不胜感激。

编辑 这将引发对这个问题的一些光,但仍无法得到它在我的代码工作: http://board.phpbuilder.com/showthread.php?10373392-RESOLVED-Nested-While-Loops-and-mySQL 谢谢!

回答

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(); } ?> 
0

为什么不让sql做所有的工作?你只需要一个查询。此查询获取你想要那么该表就可以只使用一个循环在PHP中要经过记录:)

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

如果只想显示model_body,只需在php中使用简单的if语句来检查前一行,并且如果找到匹配项,则不会回显结果。 – boomoto 2014-10-02 16:25:08

+0

好吧,我需要得到所有列+一些没有在例子中列出,并与'variant'一起回显它们。我将这个例子简化到了最基本的结构。 – BradG 2014-10-02 16:29:47

+0

仍然可以完成与sql复制和粘贴你的数据结构到小提琴,我可以看看 – boomoto 2014-10-02 16:33:00