2012-04-25 63 views
1

我有以下查询:SQL语句

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表,什么是他们的确认状态。我不想说占新用户,并将它们放入该集团拥有

+0

我有点困惑。如果用户加入创建事件的组,您是否想自动将用户添加到事件?如果是这样,你似乎可以创建一个组/事件对的表格,并且当你将一个用户添加到一个组中时,看看该组是否已经创建了任何事件,如果是这样,则将该用户添加到事件中。或者您是否希望迟到的用户显示为未经确认的活动用户?这样做似乎很简单,因为它实际上并不反映数据。 – Justin 2012-04-25 18:42:43

+0

不,我想选择属于该组的一部分的组成员。我的问题是,当我运行需要确认数据的查询时,只有在首次创建事件时添加到事件表中的用户才会返回。在事件创建后加入该组的用户将不会被退回,并且我无法更改事件表以考虑新用户。 – user1011713 2012-04-25 19:48:14

回答

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' 

你会作为一个值越来越NULL c。确认event_users表中是否有对应记录。您可以使用COALESCE()函数把有默认值:

 coalesce(c.confirmed, 0) 

 coalesce(c.confirmed, 'not subscribed yet') 
+0

嗨barbalion,我仍然只获得已经在活动用户表中返回的用户,而不是所有的小组成员。 – user1011713 2012-04-25 19:45:11

+0

任何其他提示? – user1011713 2012-04-25 21:58:54

+0

糟糕,我的错。这实际上做了诀窍。我手动覆盖了一些表格数据,导致它以前不能工作。再次感谢! – user1011713 2012-04-25 22:45:13