Mysql 复杂的SQL查询,一对多关系

Mysql 复杂的SQL查询,一对多关系,mysql,join,Mysql,Join,我有一个问题,我需要 特定的狗 所有关于那条狗的评论 发布每条评论的用户 所有狗的图片链接 发布每个链接的用户 我试过几种方法,但不知道如何使用。以下是我所拥有的(浓缩后,您无需费力阅读): 它有点接近工作,但它只会返回我的第一条评论,第一个链接,所有作为一个大数组与我要求的所有信息。每个狗有多个评论和链接,所以我需要它给我所有的评论和链接。理想情况下,它会返回一个带有dog_id、name、comments(一组注释)、links(一组链接)的对象,然后comments会有一组注释、date_

我有一个问题,我需要

  • 特定的狗
  • 所有关于那条狗的评论
  • 发布每条评论的用户
  • 所有狗的图片链接
  • 发布每个链接的用户
  • 我试过几种方法,但不知道如何使用。以下是我所拥有的(浓缩后,您无需费力阅读):

    它有点接近工作,但它只会返回我的第一条评论,第一个链接,所有作为一个大数组与我要求的所有信息。每个狗有多个评论和链接,所以我需要它给我所有的评论和链接。理想情况下,它会返回一个带有dog_id、name、comments(一组注释)、links(一组链接)的对象,然后comments会有一组注释、date_added、username和user_id,links会有一组带有link、date_added、username和user_id的链接。即使并没有链接或注释,它也必须工作


    我最近学习了一些mySQL的基础知识,但这远远超出了我的理解范围。任何帮助都会很好。谢谢

    如果不发送大量冗余数据,则无法在1 sql查询中查询此内容。因为评论和链接彼此没有关系,所以最好分开打这些电话

    总共有3个调用:1个用于检索狗数据,1个用于检索注释/用户,1个用于检索链接/用户

    SELECT d.dog_id, d.name FROM dogs AS d WHERE d.dog_id = '1';
    
    SELECT c.comment, c.date_added AS comment_date_added,
           u.username AS comment_username, u.user_id AS comment_user_id
           FROM comments AS c LEFT JOIN users AS u ON c.user_id = u.user_id
           WHERE c.dog_id = '1';
    
    SELECT l.link AS link, l.date_added AS link_date_added,
        u.username AS link_username, u.user_id AS link_user_id
           FROM links AS l LEFT JOIN users AS u ON l.user_id = u.user_id
           WHERE l.dog_id = '1';
    
    这样做的原因是,尽管您可以很好地加入dogs/comments表,但当您开始尝试加入链接时,您如何将链接与注释关联起来?没有明显的连接,所以唯一的方法是使用外部连接。这将导致通话中出现大量冗余数据


    而且,这种东西使缓存变得更容易、更直观。根据我的经验,通常使用两个自然查询比使用意大利面连接更容易

    +1-一个查询就可以了,可能会快一点,但使用三个较小的查询会大大简化事情。总之,这会让我的生活更轻松。谢谢
    SELECT d.dog_id, d.name FROM dogs AS d WHERE d.dog_id = '1';
    
    SELECT c.comment, c.date_added AS comment_date_added,
           u.username AS comment_username, u.user_id AS comment_user_id
           FROM comments AS c LEFT JOIN users AS u ON c.user_id = u.user_id
           WHERE c.dog_id = '1';
    
    SELECT l.link AS link, l.date_added AS link_date_added,
        u.username AS link_username, u.user_id AS link_user_id
           FROM links AS l LEFT JOIN users AS u ON l.user_id = u.user_id
           WHERE l.dog_id = '1';