我遇到了数据库设计问题,而且我还不熟悉MySQL,所以我想我会问这里。从多个表中获取按时间顺序排序的数据的最佳方法是什么?例如,用户做很多事情,他们投票,评论,评分,提问。我将所有这些信息保存在各自的表格中,并且#34; tblRote"," tblRate"等等,现在是棘手的部分。用户可以关注一个或多个用户,所以说你跟随3-4个人。以下内容允许您在Feed中查看他们的互动,投票,评分,评论,提问等(如Facebook或类似内容)。
从他们关注的每个人那里获取所有5个表中的所有信息然后按时间顺序对所有这些进行排序的最佳方法是什么?我假设我现在的方法(foreach追随者抓住所有选票,评论,评级等等,并且排序都会很糟糕)
我的工作理论,所以我的工作思路是创建一个Interaction表,它包含一个用户id列,其他表条目的id和一个类型引用。所以例如
用户ID | InteractionID |类型
9 1232 Comment
10 80 Rating
9 572 Vote
然后你可以继续为他们关注的每个人抓住所有的互动,排序然后说抓住前10名?并查询各个数据库以获取完整信息(评论时间,评论文本等)
答案 0 :(得分:0)
User和Follower之间存在多对多的关系。既然,Follower也是另一个用户,这就变成了多对多的递归。分解此关系时,您将获得关联表或动名称。
User_Follower {id,userid_fk,followerid_fk}
userid_fk和followerid_fk都引用了User
表。
现在,我假设您在User-tblRate,User-tblVote,User-tblPost等之间存在一对多的关系。
所以,你可以写一个像这样的联接:
选择p.postTitle,p.postTag,..., c.commentId,c.commentData,...
来自(tblUser u INNER JOIN tblPost p
ON(p.userid = u.userid))INNER JOIN tblComment c
ON(c.userid = u.userid)
其中u.userid在 (从user_follower中选择userid_fk,其中followerid_fk = 100)
orderby p.datetime_col ASC,c.datetime_col ASC 限制10;
100是您想要获取信息的用户。
这个想法是你只有一个链接User
和Follower
的关联表,然后使用简单连接来获取所有被跟随者的数据