合并两个表并处理结果

Combining Two Tables and Working with the Results

我有两个 table(课程和注册)。我需要做的是比较它们并根据我的结果执行操作。两个 table 都包含 "CourseID".

课程 (Table A) 向用户显示可用课程的完整列表。注册 (Table B) 是用户已经注册的课程列表。

简而言之,我需要比较 "CourseID" 列,如果 "CourseID" 出现在两个 table 中,那么我想回显 "registered" 这个词Table A.

中的 CourseID 旁边

我尝试过使用数组、For 循环、While 循环、Foreach 循环、连接、联合、DISTINCT ……我能想到的一切,但我无法让它工作。我对这种情况束手无策。

我在使用 PHP 方面还很陌生,所以有人可以提供的任何帮助都将非常有帮助。 (提供一个带有解释的例子也会很有帮助。)

提前感谢您的帮助。

已编辑:

很抱歉没有显示任何代码。对于 "Courses" table (Table 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 --- // ";

}

你没有提供任何代码,这让这件事变得有点困难,但我认为这样的事情是可行的。

存储到 $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 查询来完成。

我相信您可以使用 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

由于没有提供示例数据,我自己制作了示例并创建了这个可以显示用法的演示:http://sqlfiddle.com/#!9/8d8751/1