【发布时间】:2015-06-20 14:39:03
【问题描述】:
我正在为某人创建一个注册网络应用程序,并且我希望通过学生搜索将学生添加到活动注册中稍微准确一些。
目前我准备好的声明是:
("SELECT * FROM students WHERE first_name LIKE :pattern OR last_name LIKE :pattern OR id LIKE :pattern ORDER BY last_name ASC");
而且效果很好。我返回与搜索查询匹配的所有学生的列表。但是,在执行该查询之后,对于返回的每一行,我想检查 student.id 和 $_GET['activity'] 是否已经出现在参与者表中。
$_GET['activity'] 是来自activity.id 的ID
我想要的最终结果是显示所有尚未注册该活动的学生。
这可以在一个查询中实现吗?好像我宁愿那样做,然后必须对每个返回结果运行查询以查看是否应该显示它。
我已经研究过 INNER JOIN,因为我以前使用过它,但我觉得这不是我需要的。我的主要问题是如何运行该查询来检查每个结果是否已经在参与者表中。
希望这是有道理的,因为我发现很难在脑海中弄清楚如何表达它。
我的表结构:
学生 - id PRIMARY KEY AI、first_name (varchar255)、last_name (varchar255)、dob(日期)
活动 - id PRIMARY KEY AI、标题 (varchar255)、描述 (varchar255)
参与者 - id PRIMARY KEY AI、student_id (INT)、activity_id (INT)
【问题讨论】:
-
这可以在一个查询中完成,但是您想从该查询中返回什么?您想要未注册该活动的学生,还是已注册的学生?
-
我会将其添加到我的问题中。很抱歉不清楚。我想退回尚未在该活动中注册的学生。
-
您显示的查询选择了一组学生。不过,您并没有给我们任何关于您的数据库如何记录学生活动的提示。
-
您能否提供一下您的参与者表结构?
-
更新了原始帖子以包含表格结构。谢谢。