簡體   English   中英

INNER JOIN返回意外的NULL(PHP / MySQL)

[英]INNER JOIN returning un-expected NULL (PHP/MySQL)

我當前正在運行一個函數,該函數在while循環中使用內部聯接,這出乎意料地不返回任何內容。

$data3 = '\'' . implode('\', \'', $posted_email) . '\'';

$exam_recordation = mysql_query("SELECT * FROM exam WHERE partner_id IN (SELECT partner_id FROM exam WHERE Student_email = $data3) AND Student_email <> $data3");
//$name_query = mysql_query("SELECT student.email, student.name, Student_email FROM student INNER JOIN exam ON student.email = exam.Student_email WHERE student.email = $data3")

echo "<table border=='1'>
<tr>
<th>Name</th>
<th>Email</th>
<th>Exam Date</th>
<th>Level</th>
<th>Mark</th>
    <th>Style</th>

</tr>";

while($row = mysql_fetch_array($exam_recordation))
  {
  echo "<tr>";
$name_query = mysql_query("SELECT DISTINCT student.name
              FROM student
              INNER JOIN exam ON student.email = exam.Student_email
              WHERE student.email <>{$data3}");
//die();
 /*while($row1 = mysql_fetch_array($name_query))
  {
    echo "<td>" . $row1['name'] . "</td>"; //This while loop was just me overcomplicating it, soon worked out I didnt need it
  }*/
  echo "<td>" . $name_query['name'] . "</td>";
  echo "<td>" . $row['Student_email'] . "</td>";
  echo "<td>" . $row['examDate'] . "</td>";
  echo "<td>" . $row['level'] . "</td>";
  echo "<td>" . $row['mark'] . "</td>";
      echo "<td>" . $row['style'] . "</td>";

  echo "</tr>";
  }
echo "</table>";

通過我自己的調試嘗試,我意識到它返回的不是我希望的值(學生表中的名稱),而是當我在單獨的PHP函數中單獨運行它(即不在while循環內)時返回NULL值。如下所示。

$data3 = '\'' . implode('\', \'', $posted_email) . '\'';
var_dump($posted_email);
var_export($data3);
$name_query = mysql_query("SELECT DISTINCT student.name
              FROM student
              INNER JOIN exam ON student.email = exam.Student_email
              WHERE student.email <> $data3");
var_export($name_query);
echo "SELECT DISTINCT student.name
              FROM student
              INNER JOIN exam ON student.email = exam.Student_email
              WHERE student.email <> $data3";

但是,當我從SQL的最后代碼運行echo'INNER JOIN時,它工作正常,並返回2行名稱。

SELECT DISTINCT student.name FROM student INNER JOIN exam ON student.email = exam.Student_email WHERE student.email <> 'eating@gnomes.com'

我正在努力的理論涉及以下方面:

$name_query = mysql_query("SELECT DISTINCT student.name
              FROM student
              INNER JOIN exam ON student.email = exam.Student_email
              WHERE student.email <>{$data3}");
while($row = mysql_fetch_array($exam_recordation) && mysql_fetch_array($name_query))
  {
  echo "<tr>";
  echo "<td>" . $row['name'] . "</td>";
  echo "<td>" . $row['Student_email'] . "</td>";
  echo "<td>" . $row['examDate'] . "</td>";
  echo "<td>" . $row['level'] . "</td>";
  echo "<td>" . $row['mark'] . "</td>";
      echo "<td>" . $row['style'] . "</td>";

  echo "</tr>";
  }
echo "</table>";

那什么都沒有返回到我的表中,但是我想做的是在一次獲取中使用兩個查詢,以便將它們的結果都放入$ row並能夠提取相關數據。 這聽起來確實很遙不可及,所以如果我認為這是缺乏經驗的話,那是錯的。

如您所願,我已經嘗試找出問題所在,但是失敗了。 通常,僅檢查發送的查詢是否正確就可以解決這種問題,過去我什么都沒有退回,但似乎並沒有解決。 可能是我缺少數組或while循環的東西,可能不是。 我的想法真的用完了。

您確定該學生有一些考試成績嗎?

僅當兩個聯接表中都存在數據時,INNER JOIN才返回結果。

嘗試使用LEFT JOIN看看是否返回。

還可以在類似phpMyAdmin或MySQL控制台的程序中測試您的查詢,以判斷這是否是您處理結果時遇到的錯誤。

您評論了fetch方法,但無法使用它。 這是您應使用的名稱:

$rowStudent = mysql_fetch_array($name_query);
echo "<td>" . $rowStudent['name'] . "</td>";

mysql_query只發送並執行查詢,要獲取結果,您需要獲取。

您也可以使用if($rowStudent)if(!$rowStudent)檢查是否得到結果,以處理任何結果。

您應該嘗試一下,它只有一個查詢將兩個表連接在一起。

$data3 = '\'' . implode('\', \'', $posted_email) . '\'';

$exam_recordation = mysql_query("SELECT student.name, exam.Student_email,
            exam.examDate, exam.level, exam.mark, exam.style 
            FROM student INNER JOIN exam ON student.email = exam.Student_email 
            WHERE student.email <> $data3");

echo "<table border=='1'>
<tr>
<th>Name</th>
<th>Email</th>
<th>Exam Date</th>
<th>Level</th>
<th>Mark</th>
    <th>Style</th>

</tr>";

while($row = mysql_fetch_array($exam_recordation))
  {
  echo "<tr>";

  echo "<td>" . $row['name'] . "</td>";
  echo "<td>" . $row['Student_email'] . "</td>";
  echo "<td>" . $row['examDate'] . "</td>";
  echo "<td>" . $row['level'] . "</td>";
  echo "<td>" . $row['mark'] . "</td>";
      echo "<td>" . $row['style'] . "</td>";

  echo "</tr>";
  }
echo "</table>";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM