我正在从事群组和群组成员资格功能工作
相关表格是:
usuarios (id, first_name, last_name, ...)
groups (id, name, .. , 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);
有没有一种方法可以通过一个查询来实现它? (我也在想只是将创建者插入为成员并仅使用第一个查询)
最佳答案
如果您加入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 = ...
关于mysql - 统一这 2 个使用 3 个表的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11632084/