繁体   English   中英

获取带有喜欢和评论的帖子-一个查询?

[英]Get Posts with likes and comments - one query?

我将为用户个人资料开发隔离墙。 它的工作原理基本上与Facebook的评论/赞系统相同。

所以我想做的是获取与用户个人资料关联的所有墙贴(通过当前id变量)以及与此特定帖子关联的所有评论和喜欢。 我想同时使用评论和喜欢的用户数据(例如:姓名,user_id,电子邮件等)。

所以问题是:可能吗?

根据此主题的答案,不是: 获取所有新闻和所有评论

根据这个线程是: mysql / php:显示帖子,对于每个帖子,所有注释

我曾尝试使用此代码,但似乎不起作用,因为它只是从数据库中获取所有注释。

SELECT p.*, c.*, l.*, u.name as post_author, u2.name as comment_author, u3.user_id
FROM edu_wall p
LEFT JOIN edu_comments c ON c.comment_entity = p.post_id
LEFT JOIN edu_likes l ON l.like_entity = p.post_id
LEFT JOIN edu_users u ON u.user_id = p.post_author
LEFT JOIN edu_users u2 ON u2.user_id = c.comment_author
LEFT JOIN edu_users u3 ON u3.user_id = l.like_author

那么解决方案是什么? 我应该首先获取所有墙贴,然后在while()内循环注释和点赞吗? 这似乎是一个非常复杂且占用大量资源的解决方案。

提前致谢!

您可以使用工会例如:

SELECT id, p.name, NULL as "type", u1.username 
FROM edu_wall p 
LEFT JOIN users u1 ON u.id = p.user_id
UNION
SELECT id, NULL as 'name', e.type, u2.username 
FROM edu_likes e 
LEFT JOIN users u2 ON u.id = e.user_id

Null是替换表之间的多余列,因此在这里,当type为NULL时,则信息针对edu_wall用户,并且在注意它们针对edu_likes用户时。

你应该尝试看看自己

在单个查询中肯定可以做到这一点。

在不知道您的表布局以及您想使用哪些字段的情况下,我目前无法提供任何建议的代码。

然而,问题在于,单个墙贴将有大量评论和喜欢。 您当前的SQL将为注释的每种组合和每条墙贴一样返回一行。 因此,如果墙上的帖子有2条评论和2个赞,则将导致4行。

您可以通过两种方法解决此问题。 确保您在SELECT上有一个order子句,然后在php中手动处理每一行,并确定该墙贴是否有新的评论或类似内容。 如果是这样,请处理它,如果不忽略它。

或者,您可以使用聚合函数(例如GROUP_CONCAT)将您想要的字段带回一行。 然后在php中将它们炸开。 SQL像这样:

SELECT p.*, u.name as post_author, GROUP_CONCAT(u2.name SEPARATOR '#') as comment_authors, GROUP_CONCAT(u3.user_id SEPARATOR '#') as post_likers
FROM edu_wall p
LEFT JOIN edu_comments c ON c.comment_entity = p.post_id
LEFT JOIN edu_likes l ON l.like_entity = p.post_id
LEFT JOIN edu_users u ON u.user_id = p.post_author
LEFT JOIN edu_users u2 ON u2.user_id = c.comment_author
LEFT JOIN edu_users u3 ON u3.user_id = l.like_author
WHERE p.id = $SomeWallId
GROUP BY p.id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM