2013-05-02 70 views
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,因为它似乎是头撞砖墙的主要罪魁祸首。

回答

0
$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>"; 
} 

$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]"); 

看到这里,你的读取与变量$ fetch_record查询,但后来你使用的是$ exam_recordation,这是唯一的MySQL查询的资源,而不是获取的数据。

+0

所以我应该在INNER JOIN查询中使用$ fetch_record [Student_email]而不是$ exam_recordation [Student_email]?我刚刚尝试过,并没有改变结果。我原本以为mysql_query会执行它,直到它存储在$ exam_recordation变量中,这会使得它在我的INNER JOIN中以我的答案中的方式调用时可访问。 – madman 2013-05-02 19:11:28

+0

它存储它,但作为资源。请参阅资源文档 - 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

+0

对,让电子邮件进入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