2014-04-17 60 views
0

我需要在网页中一起显示多个查询(它们不能组合成一个大查询,至少我不这么认为)。我会解释一些关于这个问题的疑问。我在MySQL中有一个数据库,其中有3个相同格式的问题表通过classid链接到响应表。响应表通过instructorid链接到教师表。我需要显示一张表格,显示教师存在的每条记录的所有3个问题分数,每个表格后面跟着一些文字,表明哪个问题具有最高值以及最少值。我在MySQL中创建了一个uniontbl视图,该视图是一个联合查询,其字段为ClassID,AverageTableName。我至今是:显示多个PHP查询

$query2 = "SELECT `tbl_instructor`.`FirstName`, 
       `tbl_instructor`.`LastName`, 
       `tbl_term`.`TermID`, 
       `tbl_ucourse`.`Abbreviation`, 
       `tbl_ucourse`.`Series`, 
       `tbl_uquestion01`.`Average` AS `Q1`, 
       `tbl_uquestion02`.`Average` AS `Q2`, 
       `tbl_uquestion03`.`Average` AS `Q3` 
      FROM `tbl_instructor` 
      LEFT JOIN `undergrad`.`tbl_uresponse` ON `tbl_instructor`.`InstructorID` = `tbl_uresponse`.`InstructorID` 
      LEFT JOIN `undergrad`.`tbl_ucourse` ON `tbl_uresponse`.`CourseID` = `tbl_ucourse`.`CourseID` 
      LEFT JOIN `undergrad`.`tbl_Term` ON `tbl_UResponse`.`TermID` = `tbl_Term`.`TermID` 
      LEFT JOIN `undergrad`.`tbl_uquestion01` ON `tbl_uresponse`.`ClassID` = `tbl_uquestion01`.`ClassID` 
      LEFT JOIN `undergrad`.`tbl_uquestion02` ON `tbl_uresponse`.`ClassID` = `tbl_uquestion02`.`ClassID` 
      LEFT JOIN `undergrad`.`tbl_uquestion03` ON `tbl_uresponse`.`ClassID` = `tbl_uquestion03`.`ClassID` 
      WHERE CONCAT(LastName, ', ', FirstName, ' (', UserID, ')') = '{$instructor}'"; 

$query3 = "SELECT `tbl_instructor`.`FirstName`, 
        `tbl_instructor`.`LastName`, 
        `uniontbl`.`ClassID`, 
        `uniontbl`.`TableName`, 
        `tbl_uresponse`.`InstructorID` 
       FROM `tbl_Instructor` 
       LEFT JOIN `undergrad`.`tbl_uresponse` ON `tbl_instructor`.`InstructorID` = `tbl_uresponse`.`InstructorID` 
       LEFT JOIN `undergrad`.`uniontbl` ON `tbl_uresponse`.`ClassID` = `uniontbl`.`ClassID` 
       WHERE CONCAT(LastName, ', ', FirstName, ' (', UserID, ')') = '{$instructor}' 
       ORDER BY `uniontbl`.`Average` DESC 
       LIMIT 1"; 

$query4 = "SELECT `tbl_instructor`.`FirstName`, 
        `tbl_instructor`.`LastName`, 
        `uniontbl`.`ClassID`, 
        `uniontbl`.`TableName`, 
        `tbl_uresponse`.`InstructorID` 
       FROM `tbl_Instructor` 
       LEFT JOIN `undergrad`.`tbl_uresponse` ON `tbl_instructor`.`InstructorID` = `tbl_uresponse`.`InstructorID` 
       LEFT JOIN `undergrad`.`uniontbl` ON `tbl_uresponse`.`ClassID` = `uniontbl`.`ClassID` 
       WHERE CONCAT(LastName, ', ', FirstName, ' (', UserID, ')') = '{$instructor}' 
       ORDER BY `uniontbl`.`Average` ASC 
       LIMIT 1"; 


$result2 = mysqli_query($query2); 

$result3 = mysqli_query($query3); 

$result4 = mysqli_query($query4); 



while($row2 = mysqli_fetch_assoc($result2)) 
    { 
     echo "<br>"; 
     echo"<table>"; 
     echo "<tr>"; 
     echo "<th>Q1</th>"; 
     echo "<th>Q2</th>"; 
     echo "<th>Q3</th>"; 
     echo "</tr>"; 
     echo "<tr>"; 
     echo "<td>" . $row2['Q1'] . "</td>"; 
     echo "<td>" . $row2['Q2'] . "</td>"; 
     echo "<td>" . $row2['Q3'] . "</td>"; 
     echo "</tr>"; 
     echo"<br>"; 
     echo "</table>"; 

     while($row3 = mysqli_fetch_assoc($result3)) 
      { 
       echo $row3['TableName']; 
      } 

     echo "<br>"; 

     while($row4 = mysqli_fetch_assoc($result4)) 
      { 
       echo $row4['TableName']; 
      } 

     echo "<br>"; 

    } 

那么,如何我试图解决这个问题是使用第二和第三查询以确定哪些问题已经从uniontbl视图的最高和最低分数,并显示,经过每个表格包含问题分数。问题是第二个和第三个查询只显示在第一个表(或记录)之后并且在此之后根本不显示。我有一种感觉,问题在于实际的查询本身,但我想不出解决问题的另一种方式。附:我知道我的代码不是最好的(回应HTML等),但我只是试图让它工作...

回答

0

在打印第一行$result2后,您获取所有行$result3$result4。因此,在打印第二行$result2之后,没有什么可以从第二个和第三个查询中获取。

由于第二次和第三次查询使用LIMIT 1,每个人只有一行。您可以每次获取它们,然后在第一个查询的每一行之后显示该行。但我不知道为什么你需要多次显示相同的东西。也许你应该在开始或结束时只显示一次这两个查询的输出,而不是每行之后。

另外,你真的想为$result2的每一行创建一个全新的表吗?通常,每行只是一个大表中的一行,而不是一个单独的表,只有一行来自数据库的每行。

+0

每个记录将显示为一个单独的表的原因是因为每个记录与不同的类相关联。当然,问题分数也因记录而异,所以第二个和第三个问题的目的是确定哪个问题得分最高,哪个问题对每个类(或记录)最低。这看起来有点没有意义(您可以直观地确定这一点),但下一步将根据哪个问题得分最高/最低来显示某些文本。 – user3362278

+0

但第二个和第三个查询没有返回每个类的信息。他们只是返回教练的最高和最低分数。 – Barmar

+0

只是简单的说明,第二个和第三个查询不返回最高/最低的分数,他们返回表格的名称(换句话说,哪个问题)得分最高/最低。任何关于如何让他们按照每个类执行此操作的建议?... – user3362278