如何从MySQL中选择并使用PHP正确显示结果

时间:2014-10-01 21:14:32

标签: php mysql select distinct adodb

我有点遇到问题,需要你的帮助来识别错误的代码部分。

我会尽力解释我想要做的事情。我的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输出表内容:

首先,我尝试使用model_body列出SELECT DISTINCT列的内容,然后从那里尝试列出与variant列匹配的model_body列的每个不同值{1}}。

A - ooo     Va1
            Va4
            Va5
A - www     Va7

B - sss     Va2
            Va3
B - jjj     Va6

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

我写的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,但是我遇到了一个问题:

  1. 我仅为第一个$rs_variant->fields['variant']列出了model_body。第二个,第三个等唯一<div>的{​​{1}}为空。如何让循环显示其他匹配的model_body的变体?
  2. 这就是我现在使用的第二个循环(我相信问题在于循环本身):

    model_body

    谢谢!

2 个答案:

答案 0 :(得分:0)

注意:

  • 我使用ORDER BY进行查询。
  • 模型 model_body 模型 model_body 的下一个循环进行比较。
  • /* */
  • 中引用的代码内的更多解释
  • 无需创建复杂的嵌套循环。
  • 使用 MySQLi预备语句而不是弃用MySQL 。请阅读此处以了解有关SQL injections
  • 的更多信息

<强>代码

<?php

/* ESTABLISH CONNECTION */

$conn = new mysqli("YourHost", "YourUsername", "YourPassword", "YourDatabaseName"); /* REPLACE THE NECESSARY DATA INSIDE */

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$catalogue_make=$_GET['m'];
$previousmodel="";
$previousbody="";

if($stmt=$con->prepare("SELECT model,model_body,variant FROM tbl_catalog ORDER BY model,model_body WHERE make=?")){

$stmt->bind_param('s',$catalogue_make); /* BIND THE VARIABLE TO THE QUERY */

$stmt->execute(); /* EXECUTE QUERY */

?><table border="1"><?

$stmt->bind_result($model,$modelbody,$variant); /* STORE THE RESULTS TO THIS THREE VARIABLES */

  while($stmt->fetch()){ /* FETCH DATA INTO A LOOP */

    if($previousbody!=$modelbody){ /* COMPARE THE PREVIOUS MODEL BODY TO CURRENT MODEL BODY */

      printf("<tr><td>%s - %s</td><td>%s</td></tr>",$model,$modelbody,$variant);
      $previousmodel=$model;
      $previousbody=$modelbody;

    }

    else { /* IF MODEL BODY AND CURRENT MODEL BODY IS EQUAL, ONLY THE VARIANT TO BE PRINTED */

      printf("<tr><td></td><td>%s</td></tr>",$variant);
      $previousmodel=$model;
      $previousbody=$modelbody;

    } /* END OF ELSE */

  } /* END OF LOOP */

?></table><?php

$stmt->close();

} /* END OF PREPARED STATEMENT */

?>

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