内连接返回非预期的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>";

从我自己的尝试调试它,我已经意识到,它返回的不是我希望的值(学生表的名字),而是一个NULL值,当我在一个单独的PHP函数中运行它自己,即不在下面显示的while循环内。

$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'd 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>";

这返回什么都没有到我的表,但我要做的是使用两个查询在一个fetch,以便将它们的结果都放入$行,并能够提取相关数据。这听起来有点牵强,如果是这样的话,那就怪我缺乏经验吧。

我希望你能看到,我已经试图找出问题是什么,但没有成功。通常只是检查正在发送的查询是否正确,已经修复了这种问题,过去没有任何东西为我返回,但似乎不是为了这个问题。可能是我缺少的数组或while循环,可能不是。我真的没办法了。

您注释了获取方法,如果没有它将无法工作。你应该这样取名字:

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

mysql_query只发送和执行查询,获取结果需要fetch。

也可以检查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>";

你确定你有这个学生的考试成绩吗?

INNER JOIN只在两个连接表中都有数据时返回结果。

尝试使用LEFT JOIN看看是否返回。

还可以在phpMyAdmin或MySQL控制台中测试您的查询,以确定是否是您处理结果的查询错误。