【问题标题】:How to get multiple data from different relational table in mysql如何从mysql中的不同关系表中获取多个数据
【发布时间】:2020-09-25 09:17:28
【问题描述】:

我有 3 个关系表:用户、帖子和转发。

reposts 表中,我有以下字段:user_id(转发帖子的用户)和 post_id

posts 表中,我有以下字段:idpostsuser_id

users 表中,我有字段:idfirst_name

这是我想要得到的数据:

  1. 帖子
  2. 发帖的原用户
  3. 记者或转发帖子的用户。

到目前为止我只有这个查询:

SELECT
p.post,
u.first_name as 'Retweeter'
FROM reposts r 
LEFT JOIN users u
    ON u.id = r.user_id
LEFT JOIN posts p
    ON p.id = r.post_id 

在该代码中,我可以获取帖子和转发帖子的用户。但是如何使用 reposts 表中的 post_id 字段获取原始用户或发布帖子的原始用户的详细信息?

非常感谢!

【问题讨论】:

  • 你加入的顺序很奇怪。从帖子开始,然后离开加入用户等。
  • 再次加入用户,但这次是关于帖子和用户之间的关系。
  • 转帖可以转帖吗?在这种情况下,您需要原始海报,而不是最后一张海报吗?
  • 哦,天哪,我完全忘记了可以转发转发的功能,但我计划在我的帖子表 repost_id 中有另一个字段,我可以在其中存储 repost.id 以区分是否帖子是否转发。

标签: mysql sql join left-join


【解决方案1】:

您需要在users 表上再加入一次才能获得原始海报名称

SELECT
  ou.first_name originalPoster,
  p.post,
  u.first_name as 'Retweeter'
FROM reposts r 
LEFT JOIN users u
    ON u.id = r.user_id
LEFT JOIN posts p
    ON p.id = r.post_id 
LEFT JOIN users ou
    on p.user_id = ou.id

【讨论】:

  • 如果这个答案对你有帮助,请考虑标记为答案
【解决方案2】:

您必须加入users 两次,一次对抗posts,一次对抗reposts。如果您想包含尚未转发的帖子,您应该以posts 开头FROM 子句,然后进行左连接。

SELECT p.post,
       up.first_name,
       urp.first_name
       FROM posts p
            LEFT JOIN users up
                      ON up.id = p.user_id
            LEFT JOIN reposts rp
                      ON rp.post_id = p.id
            LEFT JOIN users urp
                      ON urp.id = rp.user_id;

【讨论】:

    猜你喜欢
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多