1

我有以下查询:

SELECT a.name_f, a.uid, a.name_l, a.profile_pic, b.position FROM users a groups_members b, WHERE a.uid = b.userid AND b.group_id=$group_var

这很有效,可以为我要呼叫的任何特定组带回所有用户的信息以及他们在组中的位置。当一个小组参加一个活动时,在那个活动页面上,我想调用上面的函数,但还要一个额外的语句来确定该用户是否被确认。所以我运行以下查询:

SELECT a.name_f, a.uid, a.name_l, a.profile_pic, b.position, c.confirmed FROM users a groups_members b, event_users c WHERE a.uid = b.userid AND b.group_id='$group_var' and c.event_id ='$event_var' and a.uid = c.userid

这也很好用,但这是我的问题出现的地方。假设某个组创建了一个事件,随后所有用户都被转储到 event_users 表中。我的第二个查询仍然有效,并显示该组中的每个用户以及他或她和确认的设置,但是当一个新用户加入该组并选择他或她的位置时,该新用户不会在我的第二个查询中返回,因此,显示所有用户及其位置的事件不考虑在事件创建后添加的任何新用户。

我希望这听起来不会太混乱。这是我的表:

event_users || id, event_id, userid, confirmed    

groups_members || id, userid, group_id, position

users || uid, name_f, name_l, profile

我的问题是我怎样才能基本上收集所有当前的组成员,然后如果他们已经进入 event_users 表,他们的确认状态是什么。我不想在我的群组页面上运行查询新用户并将他们放入群组拥有的任何事件中

4

1 回答 1

2

使用左连接:

    SELECT 
      a.name_f, a.uid, a.name_l, a.profile_pic, b.position, c.confirmed 
    FROM users a 
    JOIN groups_members b on a.uid = b.userid
    LEFT JOIN event_users c on a.uid = c.userid
    WHERE b.group_id='$group_var' and c.event_id ='$event_var'

如果 event_users 表中没有对应记录,您将获得 NULL 作为 c.confirmed 的值。您可以使用 coalesce() 函数来放置默认值:

     coalesce(c.confirmed, 0)

或者

     coalesce(c.confirmed, 'not subscribed yet')
于 2012-04-25T18:41:49.707 回答