我无法可视化要创建的查询的设置。

我有表A(用户)和表B(事件)。对于每项活动,我都需要一个未参加的用户列表。

我想有必要使用第三个表,将用户与事件相关联,其中包含用户和事件ID。如果表中没有用户和事件ID组合,则该用户未出席。

我的查询需要如何查找才能返回未参加每个事件的每个用户的列表?

或者,我可以查询事件表,循环搜索结果,对于每个事件,我可以查询在第三张表中没有匹配事件ID的记录的用户。这似乎效率低下,而且显然是错误的,因为要进行许多其他的数据库调用。

foreach ($getEvents as $v) {
    SELECT userID FROM users WHERE userID NOT IN (SELECT userID FROM tableC WHERE eventID = '".$v["eventID"]."');
}


如有必要,乐意提供更多信息。

最佳答案

如果您只想要一个未参加单个事件的用户列表,我们可以将用户表加入联接表C并完成。但是,由于您需要所有事件的报告,因此我们需要一种不同的方法。一种选择是使用日历表,该表代表每个用户与每个事件的关系。我们可以通过用户表和事件表之间的交叉联接来生成该表。然后,将该日历表左连接到联接表C

SELECT t1.userID, t1.eventID
FROM
(
    SELECT DISTINCT u.id AS userID, e.id AS eventID
    FROM users u
    CROSS JOIN events e
) t1
LEFT JOIN tableC t2
    ON t1.userID = t2.userID AND
       t1.eventID = t2.eventID
WHERE t2.userID IS NULL;

关于php - 从表A和B中选择,其中表A和表B中的记录在表C中不存在?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48179116/

10-12 02:14