通过sql和php连接三个表

tp5buhyn  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(315)

我在mysql数据库中有这3个表(我也不知道它是否完全规范化了?
或者有没有更好的方法来设计这个表来获取这个查询?)

create table T_Users(
     id int
     name varchar (50)
     picture varchar (11)
);
create table T_Groups(
     id int
     name varchar (50)
     admin_id int
);
create table T_Group_Users(
     u_id int
     g_id int
);

现在,我想获得指定用户加入的所有组,以及这些组的所有成员的详细信息(名称和图片),并通过php创建一个这样的数组(这是一个示例):

$groups = [ // Groups user by id = 1 joined 'em
        [
            'id' => 1,
            'name' => 'G_1',
            'member' => [
                ['name' => 'R', 'picture'=>''],
                ['name' => 'S', 'picture'=>'14.jpg'],
                ['name' => 'X', 'picture'=>'']
            ]
        ],
        [
            'id' => 5,
            'name' => 'G_3',
            'member' => [
                ['name' => 'T', 'picture'=>'11.jpg'],
                ['name' => 'S', 'picture'=>'14.jpg']
            ]
        ]
    ]

(由id确定的指定用户, u_id 是外键 T_Users 以及 g_id 是外键 T_Groups )

at0kjp5o

at0kjp5o1#

如果您只需要ID,可以执行以下操作:

select g_id, group_concat(u_id)
from t_group_users gu
group by g_id
having sum(u_id = ?) > 0;

这将返回一行中的每个组,其中包含组中用户的ID列表。
如果你想知道名字,你可以 join 在适当的表格中。
编辑:
要获取姓名和其他信息:

select g.id, g.name,
       group_concat(u.name, ':', u.picture)
from t_group_users gu join
     t_users u
     on gu.u_id = u.id join
     t_groups g
     on gu.g_id = g.id
group by g.id, g.name
having sum(u.name = ?) > 0;

在这里 ? 用于具有名称的参数。

相关问题