【发布时间】:2013-05-25 22:24:19
【问题描述】:
我即将为用户资料制作一面墙。它与 Facebook 的评论/点赞系统基本相同。
所以我想做的是获取与用户个人资料关联的所有墙帖(通过当前 id 变量)以及与此特定帖子关联的所有 cmets 和 likes。我想使用来自 cmets 和 likes 的用户数据(即:姓名、user_id、电子邮件等)。
所以问题是:有可能吗?
根据这个帖子的回答不是:Fetch all news and all comments
根据这个帖子是:mysql/php: show posts and for each post all comments
我已尝试使用此代码,但它似乎不起作用,因为它只是从 DB 中获取所有 cmets。
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() 中循环 cmets 和喜欢吗?这似乎是一个非常复杂且资源密集型的解决方案。
提前致谢!
【问题讨论】:
-
执行至少 2 个查询是有意义的:1 个用于获取帖子,另一个用于获取 cmets。也许第三个获得喜欢。否则你会陷入无法有效解决的制作地狱
-
你能发布表格布局吗?
-
如果我猜对了,你的数据库模式是什么样子的,查询应该没问题。提供一组示例记录,告诉我们您期望从查询中得到什么以及您实际得到什么。
-
但是作为初始注释,您的 SQL 没有在任何地方指定用户 ID,因此将获取所有墙壁,然后是这些墙壁的所有 cmets。为了提高效率,进行查询并围绕结果进行循环以进行进一步查询往往效率低下(尽管有时是唯一的选择)。