Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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
PHP/MySQL多表连接/联合_Mysql - Fatal编程技术网

PHP/MySQL多表连接/联合

PHP/MySQL多表连接/联合,mysql,Mysql,我是MySQL新手,在从多个表中选择项时遇到问题 我有3个表(用户、组、组成员)。以下是每个表的内容: 用户:用户id、用户电子邮件、用户名称 组:组id、组名称 组成员:组id、用户id 给定用户id,我想在一个查询中查找用户电子邮件,用户名,组id和组名。问题是用户一次可以在3个组中,因此在我的查询中,我需要从group_members和groups表中获取三行。任何帮助都将不胜感激,以下是我最好的两次尝试 SELECT groups.group_id, groups.group_nam

我是MySQL新手,在从多个表中选择项时遇到问题

我有3个表(用户、组、组成员)。以下是每个表的内容:

  • 用户:用户id、用户电子邮件、用户名称
  • 组:组id、组名称
  • 组成员:组id、用户id
给定用户id,我想在一个查询中查找
用户电子邮件
用户名
组id
组名
。问题是用户一次可以在3个组中,因此在我的查询中,我需要从group_members和groups表中获取三行。任何帮助都将不胜感激,以下是我最好的两次尝试

SELECT groups.group_id, groups.group_name, users.user_email, users.user_name 
     FROM groups, membership, users
     WHERE membership.user_id=<user id> AND 
           membership.group_id = groups.group_id LIMIT 3;

SELECT groups.group_id, groups.group_name, users.user_email, users.user_name 
     FROM groups 
         LEFT JOIN membership ON groups.group_id = membership.group_id 
         LEFT JOIN users ON membership.user_id = users.user_id 
     WHERE (users.user_id = <user id>);
选择groups.group\u id、groups.group\u name、users.user\u email、users.user\u name
来自组、成员、用户
其中membership.user_id=和
membership.group\u id=groups.group\u id限制3;
选择groups.group\u id、groups.group\u name、users.user\u email、users.user\u name
来自团体
在groups.group\u id=membership.group\u id上左加入成员身份
在membership.user\u id=users.user\u id上左加入用户
其中(users.user_id=);
我可以得到一行组id和组名称,但不是全部3行。感谢您的帮助。

使用此查询:

    SELECT groups.group_id, groups.group_name, users.user_email, users.user_name 
    FROM groups, membership, users 
    WHERE users.user_id=%s AND
          membership.user_id=users.user_id AND 
          membership.group_id = groups.group_id 
    LIMIT 3
这里的问题是,您将获得和用户所属的组一样多的重复电子邮件和用户名的行。如果您只需要一次用户名和电子邮件,以及一个组列表,那么它将是2个请求


<>但这也会返回用户名和电子邮件,在组PyId和GROPPENGNORE中使用空值,当用户不属于任何组时。

如果只用于显示,您可以从……中考虑<代码>选择…按用户分组。用户id
SELECT groups.group_id, groups.group_name, users.user_email, users.user_name 
FROM users 
     left inner join membership on membership.user_id = users.user_id
     inner join groups.group_id on groups.group_id = membership.group_id
Where users.user_id = %user_id%