通过SQL和PHP连接三个表

时间:2018-08-04 15:23:21

标签: php mysql sql arrays join

我在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

1 个答案:

答案 0 :(得分:2)

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

return true;

这将返回一行中的每个组,并列出该组中用户的ID。

如果需要名称,请在适当的表中输入select g_id, group_concat(u_id) from t_group_users gu group by g_id having sum(u_id = ?) > 0;

编辑:

要获取名称和其他信息:

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; 用于具有名称的参数。