SQL で使用すると内部結合が機能しますが、それを PHP の関数に統合しようとすると、「予期しない」(T_ENCAPSED_AND_WHITESPACE) という構文エラーが発生し、識別子 (T_STRING) または変数 (T_VARIABLE) が必要です。番号 (T_NUM_STRING)". コードは次のとおりです。
echo "<table border=='1'>
<tr>
<th>Name</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 <> $row['Student_email']");
while($row = mysql_fetch_array($name_query))
{
echo "<td>" . $row['name'] . "</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>";
そこに内部結合がある理由は、通過するレコードごとに $exam_recordation からの Student_email が必要だからです。$exam recordation は、設定された条件を満たした試験テーブルからのすべてのレコードを保持します。私自身の調査から、クエリのネストは最善の方法ではないことがわかりました。クエリをネストしているとは思いませんが、whileループをネストしているため、疑わしい危険/悪い習慣に見えます。この種の機能/操作を実行する方法を私が知っている唯一の方法です。
私が必要としている助けは、内部結合をその関数に入れる方法を考え出すことです。内部結合は、最初の while ループが通過する各レコードの各電子メールについて、学生テーブルから名前を取得し、それをエコーします。