【问题标题】:SQL to Get Data Other User Data from Same GroupSQL从同一组中获取数据其他用户数据
【发布时间】:2018-02-13 22:14:42
【问题描述】:

我很难理解 SQL 我需要提取与我的 PHP 应用程序中的登录用户属于同一组的其他用户的数据。

数据结构如下:

用户表

  • user_id
  • 姓名
  • 状态
  • 生物

组表

  • 组名
  • user_id

我要做的是创建一个页面,显示用户所属的同一组或多个组的所有其他成员的简历。

我试过这个 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 的简历,没有其他简历。如果我删除声明的WHERE 部分,我将获得所有用户的所有简历,而不仅仅是与我的test@testuser.com 在同一组中的用户的简历。登录用户可能属于多个组。

关于如何获取这些数据的任何想法?

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    这将返回给定用户的组:

    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;
    

    【讨论】:

    • @sorak 。 . .让我强调一下,我不认为你“改进”了我的答案的格式。您可以在“使用 SQL 和 Excel 进行数据分析,第二版”的第 1 章中了解我是如何格式化的。
    【解决方案2】:

    您可以通过自加入list 表来做到这一点:

    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 使用连接来给出答案,但我不知道他为什么这次没有,所以我这样做了。
    猜你喜欢
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 2018-12-03
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多