Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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
在mysql中如何从不同的关系表中获取多个数据_Mysql_Sql_Join_Left Join - Fatal编程技术网

在mysql中如何从不同的关系表中获取多个数据

在mysql中如何从不同的关系表中获取多个数据,mysql,sql,join,left-join,Mysql,Sql,Join,Left Join,我有3个关系表:users、posts和repost 在转发表中,我有以下字段:用户id(转发帖子的用户)和,帖子id 在posts表中,我有字段:id,posts,和用户id 在用户表中,我有字段:id和名字 以下是我想要获得的数据: 邮报 发布的原始用户 转载帖子的记者或用户 到目前为止,我只有以下问题: SELECT p.post, u.first_name as 'Retweeter' FROM reposts r LEFT JOIN users u ON u.id = r.u

我有3个关系表:users、posts和repost

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

posts表中,我有字段:idposts,和用户id

用户表中,我有字段:id名字

以下是我想要获得的数据:

  • 邮报
  • 发布的原始用户
  • 转载帖子的记者或用户
  • 到目前为止,我只有以下问题:

    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字段获取发布帖子的原始用户或原始用户的详细信息呢


    多谢各位

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

    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
    

    您必须加入
    用户
    两次,一次针对
    帖子
    ,一次针对
    转发
    。如果要包含尚未重新发布的帖子,应使用
    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;
    

    你以一种奇怪的顺序加入。从帖子开始,然后离开加入用户,等等。再次加入用户,但这次是关于帖子和用户之间的关系。是否可以重新发布帖子?在这种情况下,您是否需要原始海报,而不是最后一个转载者?哦,天哪,我完全忘记了转载的功能,但我计划在我的posts表repost_id中有另一个字段,用于存储repost.id,以区分该帖子是否为转载。非常感谢!如果这个答案对你有帮助,请考虑把它标记为答案,非常感谢!