Php SQL从同一组中获取其他用户数据

Php SQL从同一组中获取其他用户数据,php,mysql,sql,Php,Mysql,Sql,我正绞尽脑汁研究SQL,因为我需要提取与PHP应用程序中登录用户属于同一组的其他用户的数据 数据结构如下所示: 用户表 用户id 名字 地位 生物 组表 组名称 用户id 我要做的是创建一个页面,显示用户所属的同一组或多个组的所有其他成员的bios 我尝试过以下SQL: SELECT list.listname, list.user_id, list.groupname FROM list LEFT JOIN user_group ON list.user_id = user_gro

我正绞尽脑汁研究SQL,因为我需要提取与PHP应用程序中登录用户属于同一组的其他用户的数据

数据结构如下所示:

用户表
  • 用户id
  • 名字
  • 地位
  • 生物
组表
  • 组名称
  • 用户id
我要做的是创建一个页面,显示用户所属的同一组或多个组的所有其他成员的bios

我尝试过以下SQL:

SELECT list.listname, list.user_id, list.groupname 
FROM list 
LEFT JOIN user_group ON list.user_id = user_group.user_id 
WHERE user_group.user_id = 'test@testuser.com' 
ORDER BY list.groupname
但我刚拿到
test@testuser.com
,没有其他bios。如果我删除语句的
WHERE
部分,我将获得所有用户的所有bios,而不仅仅是与我的
WHERE在同一组中的用户的biostest@testuser.com
。登录的用户可能属于多个组


关于如何获取这些数据有什么想法吗?

这将返回给定用户的组:

SELECT l.groupname
FROM list l 
WHERE l.user_id = 'test@testuser.com'
ORDER BY l.groupname;
如果希望组中的所有用户

SELECT l.listname, l.user_id, l.groupname
FROM list l LEFT JOIN
     user_group ug
     ON l.user_id = ug.user_id 
WHERE l.groupname IN (SELECT l2.groupname
                      FROM list l2 
                      WHERE l2.user_id = 'test@testuser.com'
                     )
ORDER BY l.groupname;

您可以通过自连接
列表
表来完成此操作:

SELECT l.listname, l.user_id, l.groupname
FROM list l
LEFT JOIN user_group ug ON l.user_id = ug.user_id 
INNER JOIN list l2 ON l2.groupname = l.groupname
                  AND l2.user_id = 'test@testuser.com'
ORDER BY l.groupname;

在PHPMyAdmin中测试这个SQL时,我得到了很多语法错误,从“list”(l2之前)附近的未识别关键字开始!是的,关键字
FROM
是复制/粘贴错误。现在试试看。它给出的结果与Gordon的答案完全相同,但是使用自连接而不是子查询,这通常更好。通常Gordon使用连接给出答案,但我不知道为什么这次他没有,所以我做了。@sorak。让我强调一下,我不认为你“改进”了我答案的格式。您可以在“使用SQL和Excel进行数据分析,第二版”的第1章中了解我是如何格式化的。