我有以下查询:
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 :(得分: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')