В настоящее время я запускаю функцию, которая использует внутреннее соединение в цикле while, которое не возвращает ничего назад.INNER JOIN возвращающийся непредвиденный NULL (PHP/MySQL)
$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";
Однако, когда я бегу echo'd INNER JOIN из этого последнего бита кода в SQL он отлично работает и возвращает 2 строки имен.
SELECT DISTINCT student.name FROM student INNER JOIN exam ON student.email = exam.Student_email WHERE student.email <> '[email protected]'
Теории я работаю в стороне что-то вдоль линий:
$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, может и нет. На самом деле у меня кончились идеи.
Да, я уверен. Я использовал консоль SQL как таковой в myphpadmin для проверки запроса, который вышел из эха запроса INNER JOIN, и он возвратил 2 строки. Я предполагаю, что это то, что вы имеете в виду. – madman
phpmyadmin, а это не myphpadmin. – madman