[英]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.