gpt4 book ai didi

mysql - 建模社交应用程序:我关注的用户订购“喜欢”

转载 作者:行者123 更新时间:2023-11-29 16:53:07 25 4
gpt4 key购买 nike

背景:


Instagram允许用户查看喜欢任何帖子的人的完整列表
对“喜欢者”列表进行排名,以便您关注的人始终分组在一起显示在喜欢列表的顶部
即使帖子的赞次数超过1000万,也吸引了1000多个关注者


我应该如何对数据建模(最好在MySQL中)以复制这种类型的功能?



我尝试过的

对于喜欢发表帖子的用户,直接按页面逐一关注,可以很容易地返回赞:

SELECT uid, date,
EXISTS(SELECT 1 FROM Follows a WHERE a.uid = "1" and a.followsUid = Likes.uid limit 1) as youFollow
FROM Likes WHERE pid = 30
ORDER BY youFollow DESC, date DESC LIMIT 10


这种方法的问题在于,它仍然不会将我关注的所有用户都显示在列表顶部,仅显示我关注的给定页面用户(限制为10个)。

有什么方法可以实现,而无需扫描帖子的每个“喜欢”行?

我能想到的唯一其他方法是“扇出” /收件箱模型,用户可以订阅他们所关注的人的喜欢的东西。然后我可以查询类似 select * from LikeEvents where uid IN (people I follow) and postId = pid的内容,但这似乎会导致大量冗余数据

最佳答案

最简单的方法之一是加入Likes表和Follows表并按结果集进行排序。例如:

SELECT Likes.uid, Likes.date FROM Likes 
LEFT JOIN Follows ON Follows.uid = 1 AND Follows.followsUid = Likes.uid
WHERE Likes.pid = 30
ORDER BY Follows.uid DESC, Likes.date DESC LIMIT 10


当然,如果要避免全表扫描,则必须在Likes表和Follows表上创建索引。例如:

CREATE INDEX likes_pid on Likes(pid);
CREATE INDEX follows_uid on Follows(uid);


另一种方法是在Likes表中创建一个等级列,并对其排序结果集。

SELECT * FROM Likes WHERE Likes.pid = 30 ORDER BY rank DESC, date DESC LIMIT 10


自然,您必须在创建“赞”时计算并更新等级列

关于mysql - 建模社交应用程序:我关注的用户订购“喜欢”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52713668/

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