【问题标题】:Best option for getting feed data from multiple tables?从多个表中获取提要数据的最佳选择?
【发布时间】:2014-09-05 14:49:28
【问题描述】:

我遇到了数据库设计问题,而且我对 MySQL 还是很陌生,所以我想我会在这里问。从多个表中获取按时间顺序提供的数据的最佳方法是什么?例如,用户做了很多事情,他们投票、评论、评分、提问。我将所有这些信息保存在他们各自的表格“tblVote”、“tblRate”等中,现在是棘手的部分。一个用户可以关注一个或多个用户,假设您关注了 3-4 个人。关注可让您在您的信息流(如 Facebook 或类似网站)中查看他们的互动、投票、评分、评论、提问等。

从所有 5 个表格中获取他们关注的每个人的所有信息,然后按时间顺序对所有信息进行排序的最佳方法是什么?我假设我目前的方法(foreach 追随者获取所有选票、cmets、评级等并进行排序会很糟糕)

我的工作理论,所以我的工作想法是创建一个交互表,其中有一列用于用户 id、其他表条目的 id 和类型引用。比如

用户 ID |交互 ID |输入

 9       1232     Comment


10       80      Rating


9        572     Vote

然后你可以继续获取他们关注的每个人的所有交互,排序然后说获取前 10 名?并查询各个数据库以获取完整信息(评论时间、评论文本等)

【问题讨论】:

  • 为什么不在用户关注者之间建立多对多关系。然后使用常规连接从这 5 个表中获取您需要的所有信息,按 datetime_col 排序,LIMIT 10?我只是想知道是什么阻止了你做你想做的事?
  • 就像我说的我还不是 mysql 的超级隐私,我只是假设每个用户每个表抓取数百/数千行将是疯狂的资源密集型。

标签: mysql database database-design relational-database database-schema


【解决方案1】:

用户和关注者之间存在多对多关系。因为,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

开启(c.userid = u.userid)

u.userid 在哪里
(从 user_follower 中选择 userid_fk,其中 followerid_fk = 100)

orderby p.datetime_col ASC, c.datetime_col ASC 限制 10;

100 是您要为其获取信息的用户。

这个想法是你只有一个关联表链接UserFollower,然后使用简单的连接来获取所有关注者的数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 2018-02-19
    • 2016-04-28
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多