gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:45:33 26 4
gpt4 key购买 nike

我有一个查询需要得到

  1. 一只特定的狗
  2. 与那只狗有关的所有评论
  3. 发表每条评论的用户
  4. 狗图片的所有链接
  5. 发布每个链接的用户

我已经尝试了几种方法,但无法弄清楚如何使用它。这是我所拥有的(浓缩所以您不必费力地完成所有内容):

 SELECT s.dog_id,
s.name,
c.comment,
c.date_added AS comment_date_added,
u.username AS comment_username,
u.user_id AS comment_user_id,
l.link AS link,
l.date_added AS link_date_added,
u2.username AS link_username,
u2.user_id AS link_user_id
FROM dogs AS d
LEFT JOIN comments AS c
ON c.dog_id = d.dog_id
LEFT JOIN users AS u
ON c.user_id = u.user_id
LEFT JOIN links AS l
ON l.dog_id = d.dog_id
LEFT JOIN users AS u2
ON l.user_id = u2.user_id
WHERE d.dog_id = '1'

它有点接近工作了,但它只会返回第一条评论和第一个链接,所有这些都是一个大数组,包含我请求的所有信息。每只狗有多个评论和链接,所以我需要它给我所有的评论和所有链接。理想情况下,它会返回一个包含 dog_id、名称、评论(评论数组)、链接(链接数组)的对象,然后评论会有一堆评论、date_added、用户名和 user_id,链接会有一个一堆带有链接、添加日期、用户名和用户 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';

这样做的原因是,虽然您可以很好地加入狗/评论表,但当您开始尝试加入链接时 - 您如何将链接与评论联系起来?没有明显的连接,所以唯一的方法是使用外部连接。这将导致您的通话中出现大量冗余数据。

另外,这种东西使缓存变得更容易和更直观。根据我的经验,与意大利面条连接相比,使用几个自然查询通常最容易。 :)

关于mysql - 复杂的SQL查询,一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2633235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com