我有四张 table
发布——用户——图片——评论
我想检索有关所有帖子的信息、发布帖子的用户、与之关联的图像(每个帖子只有一张图片)以及与每个给定帖子关联的(列表/数组)评论。
这是我的:
SELECT *
FROM post
LEFT JOIN image
ON post.image_id=image.id
LEFT JOIN user
ON user.id=post.user_id
LEFT JOIN comment
ON comment.post_id =post.id
这几乎可以工作,除了每个帖子记录都针对它的许多评论中的每一个重复。我如何获得一条包含所有评论的记录?
最佳答案
除了 *
操作符真的很低效,你不能只在一个查询中做“一个帖子”<=>“很多评论”。每个条目都将合并帖子及其评论。
您可以使用技巧,例如 GROUP_CONCAT
来创建“注释行”。但这真的很奇怪。
Group_Concat
的示例
SELECT p.*,
GROUP_CONCAT(image.url SEPARATOR "~") AS image_url, GROUP_CONCAT(comment.text SEPARATOR "#~#") AS comment_text
FROM post p
LEFT JOIN image
ON p.image_id=image.id
LEFT JOIN user
ON user.id=p.user_id
LEFT JOIN comment
ON comment.post_id =p.id
它会给你每篇文章一行,每条评论用“#~#”粘在一起。不太酷。
我认为您只需要让 SQL 自然地处理它即可。
关于mysql - 一对多,在一个查询中选择一个和多个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24870967/