0
我正在使用一个较小的函数来尝试调试一个更大的函数的内部连接。我是一个很少使用连接经验的新手。事实上,我刚刚开始尝试使用两三天前的内连接作为我的第一次加入体验。较小的功能如下:试图调试INNER JOIN cannundrum
$data3 = '\'' . implode('\', \'', $posted_email) . '\'';
echo "post email var dump: ";
var_dump($posted_email);
$exam_recordation = mysql_query("SELECT Student_email FROM exam WHERE partner_id IN (SELECT partner_id FROM exam WHERE Student_email = $data3) AND Student_email <> $data3");
echo "<br>recordation query: ";
echo "SELECT Student_email FROM exam WHERE partner_id IN (SELECT partner_id FROM exam WHERE Student_email = $data3) AND Student_email <> $data3";
echo "<br>recordation var dump: ";
var_dump($exam_recordation);
echo "<table border=='1'>
<tr>
<th>Name</th>
</tr>";
while ($fetch_record = mysql_fetch_array($exam_recordation))
{
echo "<tr>";
echo "<td>" . $fetch_record['Student_email'] . "</td>";
echo "</tr>";
}
echo "</table>";
//inner join should use the email of the partner out of $exam query to find their name and print it
$name_query = mysql_query("SELECT DISTINCT student.name
FROM student
INNER JOIN exam ON student.email = exam.Student_email
WHERE student.email = $exam_recordation[Student_email]");
echo "<br><br>INNER JOIN query: ";
echo "SELECT DISTINCT student.name
FROM student
INNER JOIN exam ON student.email = exam.Student_email
WHERE student.email = $exam_recordation[Student_email]";
echo "<br>query result dump: ";
var_dump($name_query);
的所有结果如下:
post email var dump:
array
'Student_email' => string '[email protected]' (length=13)
recordation query: SELECT Student_email FROM exam WHERE partner_id IN (SELECT partner_id FROM exam WHERE Student_email = '[email protected]') AND Student_email <> '[email protected]'
recordation var dump:
resource(6, mysql result)
Name
[email protected]
INNER JOIN query: SELECT DISTINCT student.name FROM student INNER JOIN exam ON student.email = exam.Student_email WHERE student.email =
query result dump:
boolean false
哪里出了问题你问?在INNER JOIN中,我无法弄清楚它为什么不将来自$ exam_recordation查询的电子邮件放入它中,即使它在表格中被拾取。在更大的功能中,我会让INNER JOIN在while循环中使用记录查询来产生我期望的效果。我一直在努力解决这个问题一段时间,因为我试图修复/寻求帮助来修复整个主函数失败了,我想我会试试这个问题的INNER JOIN,因为它似乎是头撞砖墙的主要罪魁祸首。
所以我应该在INNER JOIN查询中使用$ fetch_record [Student_email]而不是$ exam_recordation [Student_email]?我刚刚尝试过,并没有改变结果。我原本以为mysql_query会执行它,直到它存储在$ exam_recordation变量中,这会使得它在我的INNER JOIN中以我的答案中的方式调用时可访问。 – madman 2013-05-02 19:11:28
它存储它,但作为资源。请参阅资源文档 - http://www.php.net/manual/en/language.types.resource.php。在你的情况下,我会建议'while($ fetch_record = mysql_fetch_assoc($ exam_recordation)){$ email = $ fetch_record ['Student_email']; }'然后在INNER JOIN:'WHERE student.email = $ email' – 2013-05-02 19:28:31
对,让电子邮件进入INNER JOIN,我仍然得到INNER JOIN查询转储的假布尔值。我已经计算出它是因为$ email会返回它所需的没有单引号的电子邮件。我的第一个想法是将它们内爆,然后使用结果变量代替$ email。 'while($ fetch_record = mysql_fetch_array($ exam_recordation)) \t { \t \t $ email = $ fetch_record ['Student_email']; \t \t $ data8 ='\''。 implode('\',\'',$ email)。 '\''; \t}'刚试过这个,我得到了一个implode错误,但是它对$ posting_email有效。 – madman 2013-05-02 19:42:58