2014-04-17 61 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