0

我在一个组和组成员功能中工作

相关表格是:

usuarios (id, first_name, last_name, ...)

组(id、名称、..、id_user)

group_members (id, id_group, id_user)

使用这种设计,我需要从组表中获取创建者(groups.id_user 是创建者)和来自 group_members 的成员(group_members.id_usuario)

目前我只能通过 2 个查询来实现:

/* Retrieve members */
$q = 'SELECT usuarios.id as uid, usuarios.avatar, usuarios.first_name,usuarios.last_name 
                  FROM usuarios LEFT JOIN group_members ON usuarios.id = group_members.id_user
                  WHERE group_members.id_group = '.$this->id.'';
$r =  cache_query($q,'',10);
/* Retrive creator */           
$q2 = 'SELECT usuarios.id as uid, usuarios.avatar, usuarios.first_name,usuarios.last_name
                   FROM usuarios LEFT JOIN groups ON usuarios.id = groups.id_user
                   WHERE groups.id = '.$this->id;
$r2 =  cache_query($q2,'',10);

有没有办法通过一个查询来实现它?(我也在考虑只是将创建者作为成员插入并且只使用第一个查询)

4

2 回答 2

3

如果您加入了usuarios两次表,那么您可以同时获取成员和组创建者信息:

select u.id as uid,
    u.avatar,
    u.first_name,
    u.last_name,
    uc.id as creator_uid,
    uc.avatar as creator_avatar,
    uc.first_name as creator_first_name,
    uc.last_name as creator_last_name
from groups g
inner join group_members gm on g.id = gm.id_group
left outer join usuarios u on gm.id_user = u.id
left outer join usuarios uc on g.id_user = uc.id
where g.id = ...
于 2012-07-24T13:44:15.783 回答
0

您需要结合两个查询并在子句中添加OR条件:WHERE

SELECT usuarios.id as uid, usuarios.avatar, usuarios.first_name,usuarios.last_name
FROM usuarios
     LEFT JOIN group_members
        ON usuarios.id = group_members.id_user
     LEFT JOIN groups
        ON usuarios.id = groups.id_user
WHERE (group_members.id_group =  '.$this->id.' OR groups.id = '.$this->id)
于 2012-07-24T13:45:47.693 回答