合并两个表并处理结果

时间:2018-07-08 19:29:45

标签: php multiple-tables

我有两个表(课程和注册)。我需要做的是比较它们并根据我的结果执行操作。两个表都包含“ 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 --- // ";

}

2 个答案:

答案 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