通过内部联接从不同表中检索值

时间:2013-03-12 01:34:54

标签: php inner-join

我无法使用内部联接从不同的表中检索值,输出始终不会检索任何内容..此外,没有错误消息,我无法确定我的代码中出了什么问题..可以有人请帮忙?我非常感激。这是我的代码的一部分..

<?php
    $con=mysql_connect("localhost","root","");
    mysql_select_db("student_records",$con);
    if(isset($_COOKIE['username']))
    {
        if($_COOKIE['username']!='admin')
        {
            $tbl6=mysql_query("SELECT A.LName, A.FName, A.MName, B.YearLevel
            FROM student as A INNER JOIN stud_course as B ON A.StudNo=B.StudNo INNER JOIN course as C ON B.CourseCode=C.CourseCode INNER JOIN religion as D ON A.ReligionID=D.ReligionID
            WHERE A.StudNo = '".mysql_real_escape_string($_COOKIE['username'])."' ");
            while($row=mysql_fetch_array($tbl6))
            {
                echo "<td>".$row['LName']."</td><td>".$row['FName']."</td><td>".$row['MName']."</td><td>".$row['Course']."</td><td>".$row['YearLevel']."</td><td>".$row['EAdd']."</td><td>".$row['ReligionName']."</td></tr>";

            }
        }
    }
    ?>

1 个答案:

答案 0 :(得分:2)

内部联接要求数据存在于联接中包含的两个表中。在您的情况下,您有四个表,其中任何一个表都可能缺少相关数据:

SELECT A.LName, A.FName, A.MName, B.YearLevel, C.Course
FROM student as A 
INNER JOIN stud_course as B ON 
    A.StudNo=B.StudNo 
INNER JOIN course as C ON 
    B.CourseCode=C.CourseCode 
INNER JOIN religion as D ON A.ReligionID=D.ReligionID
WHERE A.StudNo = '".mysql_real_escape_string($_COOKIE['username'])."' "
  • 如果student表中没有记录StudNo等于用户名Cookie,则不会获得任何数据。
  • 如果学生在stud_course表中没有任何记录,您将无法获得任何数据。
  • 如果CourseCode表格中不存在stud_course中的course,您将无法获得数据。
  • 如果学生的ReligionID为空或者宗教不在religion表中,您将无法获得数据。

我建议将SQL分成更小的部分(或者可能将每个INNER JOIN切换为LEFT OUTER JOIN)以调试并发现问题所在。

注意,如果您打算尝试使用它,则必须确保将CourseEadd(不确定来自哪个表格)字段添加到您的选择列表中。