Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从表A和表B中选择,其中表A和表B中的记录在表C中不存在?_Php_Mysql_Database - Fatal编程技术网

Php 从表A和表B中选择,其中表A和表B中的记录在表C中不存在?

Php 从表A和表B中选择,其中表A和表B中的记录在表C中不存在?,php,mysql,database,Php,Mysql,Database,我在可视化要创建的查询的设置时遇到问题 我有表A用户和表B事件。对于每一个活动,我都想要一个没有参加的用户列表 我认为第三个表是必要的,它将用户与事件关联起来,同时包含用户和事件ID。如果表中没有用户和事件ID的组合,则用户没有参加 我的查询需要如何查看才能返回未参加每个活动的每个用户的列表 或者,我可以查询events表,循环搜索结果,对于每个事件,我可以查询第三个表中没有匹配事件ID的记录的用户。这似乎效率低下,而且显然是错误的,因为需要进行许多额外的db调用 foreach ($getEv

我在可视化要创建的查询的设置时遇到问题

我有表A用户和表B事件。对于每一个活动,我都想要一个没有参加的用户列表

我认为第三个表是必要的,它将用户与事件关联起来,同时包含用户和事件ID。如果表中没有用户和事件ID的组合,则用户没有参加

我的查询需要如何查看才能返回未参加每个活动的每个用户的列表

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

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

如果需要,我们很乐意提供更多信息。

如果您只需要一个没有参加任何活动的用户列表,我们可以将用户表加入连接表C,然后完成。然而,由于您需要所有事件的报告,我们需要不同的方法。一种选择是使用一个日历表,它表示每个用户与每个事件的关系。我们可以通过用户表和事件表之间的交叉连接生成此表。然后,左键将此日历表连接到连接表C


您可以通过生成所有用户/事件组合来处理此问题。然后,筛选出确实存在的:

select e.event_id, u.user_id
from events e cross join
     users u left join
     userevents ue
     on ue.event_id = e.event_id and ue.user_id = u.user_id
where ue.event_id is null;
试试这个查询

SELECT
         e.event_id     AS 'Event ID'   , 
         u.user_id      AS 'User ID' 
    FROM
         events         e               ,
         users          u 
    WHERE 
          e.event_id NOT IN (SELECT event_id FROM userevents)
    AND   
          u.user_id  NOT IN (SELECT user_id FROM users)

用户表和事件表中有哪些信息?是否有相应的字段?事件表和用户表之间没有关系。假设每个表中只有userID和eventID字段,而其他字段是不相关的。@NickDawes用户和事件之间必须存在某种关系,否则您的问题无法回答。C表似乎是用户和他们参加的活动之间的连接表。抱歉@TimBiegeleisen,我还没有创建第三个表,因此在这个阶段不存在任何关系。创建第三个表将引入这种关系,但是如何查询数据库以获得所需的结果呢?如果我想查询没有参加特定活动的用户,这个解决方案将是完美的,但是我想返回events表中每个活动的用户列表。结果集如下所示。。。eventID userID 1 1 2 1 3 2 1这表明用户1、2和3没有参加活动1,但用户2和3参加了活动2。嘿,蒂姆,我看到你编辑了你的回复-你有没有可能解释这个问题?戈登给出了类似的回答。基本思想是交叉连接用户和事件。这将给出一个表,其中列出了每个事件和用户。然后用C左键连接,只保留某个用户/事件不匹配的行。我明白了!因此,交叉连接创建了一个包含所有可能的用户/事件组合的表,查询的其余部分只是扫描第三个表以查找匹配项。不匹配的记录表明用户没有参加活动,因为第三个表中没有记录。我会很快设置好这个问题,然后关闭这个问题。是的,因此您缺少连接表C,然后您需要对日历表进行交叉连接。
SELECT
         e.event_id     AS 'Event ID'   , 
         u.user_id      AS 'User ID' 
    FROM
         events         e               ,
         users          u 
    WHERE 
          e.event_id NOT IN (SELECT event_id FROM userevents)
    AND   
          u.user_id  NOT IN (SELECT user_id FROM users)