mysql - 统一这 2 个使用 3 个表的查询

标签 mysql sql query-optimization multiple-tables

我正在从事群组和群组成员资格功能工作

相关表格是:

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/

相关文章:

mysql - 用变量模拟 row_number 忽略顺序

mysql - SQL外键添加问题

mysql - 如何使用 Resque 在父子之间共享 MySQL 连接?

mysql - 奇怪的 MySQL 结果

java - 带有多个paramsin java mysql的PreparedStatement问题

MySQL,20 亿行数据,只读,性能优化?

mysql - MySql 查询慢(优化 LEFT OUTER JOIN)

mysql - 将 SUMPRODUCT 滑率佣金计算从 Excel 移植到 MYSQL

类似mysql的查询拉取结果很慢

mysql - 优化解析 5000 万行 MySQL 表的请求