通过内连接从不同的表中检索值
Posted
技术标签:
【中文标题】通过内连接从不同的表中检索值【英文标题】:Retrieving values from different tables via inner join 【发布时间】:2013-03-12 01:34:53 【问题描述】:我无法使用内部联接从不同的表中检索值,输出始终不检索任何内容。此外,没有错误消息,我无法确定我的代码中出了什么问题。有人可以请帮忙?我会非常感激。这是我的代码的一部分..
<?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>";
?>
【问题讨论】:
Please, don't usemysql_*
functions in new code。它们不再维护and are officially deprecated。看到red box?改为了解prepared statements,并使用PDO 或MySQLi - this article 将帮助您决定哪个。如果你选择 PDO,here is a good tutorial.
另外,不要输入大写字母。这是在线版的呐喊。
@JohnConde - 你有没有把评论保存在某个地方,剪切和粘贴?
@jared Farrish。是的。有一个指向 Github Gist 的链接漂浮在这里的某个地方。
试试LEFT JOIN
而不是INNER JOIN
【参考方案1】:
内部联接要求联接中包含的两个表中都存在数据。在您的情况下,您有四个表,其中任何一个表都可能缺少相关数据:
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
表中没有任何记录,您将得不到任何数据。
如果stud_course
中的CourseCode
不存在于course
表中,您将得不到任何数据。
如果学生的ReligionID
为空或具有不在religion
表中的宗教,您将不会获得任何数据。
我建议将 SQL 分成更小的部分(或者可能将每个 INNER JOIN
切换为 LEFT OUTER JOIN
)以调试并发现问题所在。
注意,如果您要尝试使用它,您必须确保将 Course
和 Eadd
(不确定来自哪个表)字段添加到您的选择列表中。
【讨论】:
我还应该注意,我个人不喜欢别名表。如果我在整个 SQL 中使用表名,我觉得会更清楚。但这只是我。 非常感谢。我将尝试您的建议。 :) 有一条错误消息表明索引未定义并且它指向这一行.. echo "以上是关于通过内连接从不同的表中检索值的主要内容,如果未能解决你的问题,请参考以下文章