一些背景:
我正在开发一种社交网络。 有带有下一个表的数据库:
users(user_id, user_name, password, etc.)
posts(post_id, user_id, post_text, post_data, etc.)
followings(relationship_id, follower_id, following_id, added_date_time)
likes(like_id, user_id, post_id, added_date_time)
comments(comment_id, user_id, post_id, comment_text, added_date_time)
问题是:
如何实现查询,以获取有关我的关注者(我关注的人)最近做了什么的信息(例如,有人喜欢/评论了某些内容)并按 date_time 对这组信息进行排序?
我可以使用一个查询来完成它吗?或者我必须自己进行多次查询并用 PHP 处理所有这些东西?
最好的方法是什么?
最佳答案
您可以像这样在选择联合中标准化输出
SELECT t.type, t.user_id, u.user_name, t.type_id, t.post_id, t.text, t.added_date_time
FROM (
SELECT 'posts' as type, p.user_id, p.post_id as type_id, p.post_id, post_text as text, p.added_date_time
FROM posts p
JOIN followings f ON (f.following_id = p.user_id)
WHERE f.follower_id = @user
UNION
SELECT 'comments' as type, c.user_id, c.comment_id as type_id, c.post_id, comment_text as text, c.added_date_time
FROM comments c
JOIN followings f ON (f.following.id = c.user_id)
WHERE f.follower_id = @user
UNION
SELECT 'likes' as type, l.user_id, l.like_id as type_id, l.post_id, post_text as text, l.added_date_time
FROM likes l
JOIN followings f ON (f.following.id = c.user_id)
JOIN posts p ON (l.post_id = p.post_id)
WHERE f.follower_id = @user
) as t
JOIN users u ON (t.user_id = u.user_id)
ORDER BY added_date_time DESC;
因此您只需一次查询即可获取所有数据。
我希望它对你有用。
关于php - 您关注的人的 mysql Activity 源(点赞、评论等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23988959/