Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过SQL和Php连接三个表_Php_Mysql_Sql_Arrays_Join - Fatal编程技术网

通过SQL和Php连接三个表

通过SQL和Php连接三个表,php,mysql,sql,arrays,join,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(   

我在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_用户,g_id是外键T_组

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

select g_id, group_concat(u_id)
from t_group_users gu
group by g_id
having sum(u_id = ?) > 0;
这将返回一行中的每个组,其中包含组中用户的ID列表

如果需要名称,可以在相应的表中创建联接

编辑:

要获取名称和其他信息,请执行以下操作:

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;

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

@eminems我不知道应该将id放在哪里?这个查询只返回false。表不为空如果表不为空,则应给出具有适当id的结果。@mohit kumar否查询在T_组中有错误。g_id=T_组T_组在T_组上没有g_id键入。id=T_组用户。g_id选择T_组。*,来自t_组的成员左加入t_组上的t_组用户。id=t_组用户。g_id其中t_组用户。u_id=1选择t_用户。*来自t_用户左加入t_组上的t_组用户。g_id=t_组。id作为成员这不起作用,但我想这样。。。。