我有两个表(课程和注册)。我需要做的是比较它们并根据我的结果执行操作。两个表都包含“ CourseID”列。
课程(表A)向用户显示了可用课程的完整列表。注册(表B)是用户已经注册的课程的列表。
简而言之,我需要比较“ CourseID”列,如果两个表中都出现“ CourseID”,那么我想在表A中CourseID旁边回显“ registered”一词。
我尝试过使用数组,For循环,While循环,Foreach循环,联接,联合,DISTINCT ...我能想到的所有东西,但我无法使用。我对这种情况不知所措。
我在使用PHP方面还很陌生,因此任何人可以提供的帮助都将非常有用。 (提供一个带有说明的示例也会很有帮助。)
预先感谢您的帮助。
编辑:
很抱歉没有显示任何代码。对于“课程”表(表A),我正在使用While循环,如下所示:
$query = "SELECT * FROM Courses WHERE Active = 'Yes' ORDER BY CourseID ASC";
$result = mysql_query($query)
or die ("Could Not Execute Query.");
while ($row = mysql_fetch_assoc($result))
{
extract($row);
echo" // --- HTML CODE --- // ";
}
答案 0 :(得分:0)
您没有提供任何代码,这使得这有点困难,但是我认为类似的事情可能有用。
存储到$ courses变量
SELECT CourseID FROM Courses;
存储到$ enrollments变量
SELECT CourseID FROM Enrollment WHERE UserID = 1;
然后,您可以轻松显示用户已经选择的课程
foreach ($courses as $courseId) {
if (in_array($courseId, $enrollments)) {
// already joined course
} else {
// show in available list
}
}
这是一个非常简单的示例,但是也可以使用一个sql查询来完成。
答案 1 :(得分:0)
我相信您可以通过left join
和双重on
语句来完成您想完成的任务。 (CASE
只是为了使其更易于阅读)
应该执行以下操作:
select a.name,
case
when b.courseid is null then
'Not Enrolled'
else
'Enrolled'
end
from courses as a
left join enrolled as b
on a.courseid = b.courseid
and b.userid = 1
由于未提供示例数据,因此我制作了自己的示例并创建了可以显示用法的演示:issues