1

总结:在FB上存储类似系统的信息最有效的方法是什么。又名,喜欢的人会被保存,喜欢的人会被保存等等。

它需要与用户 ID 相关联,以便知道谁喜欢它。问题是,您是否有一列有一个以逗号分隔的被喜欢事物的 id 列表,或者您是否为每个喜欢的事物设置了一个单独的列(列太多)。存储的信息将是一个布尔值 (1/0),但需要与用户以及喜欢的“页面”相关联。

我的想法是这样的:

列名=喜欢例如:

1,2,3,4,5

又名,用户“喜欢”了 id 为 1、2、3、4 和 5 的页面。要计算总“喜欢”,需要进行计数,然后将其存储在与页面本身关联的数据库中(表已经存在)。

这对我来说似乎是最好的方法,但有没有人能想到的更好的选择?

PS我不喜欢FB,但这是最简单的解释。

编辑:与stackoverflow上的加/负类似的想法。

4

1 回答 1

3

在这种情况下,最好的方法是创建一个新表来跟踪喜欢。因此,假设您有 table posts,其中有一列post_id包含所有帖子(用户可以对其投票)。并且您有另一个users带有 column 的表user_id,其中包含所有用户。

您应该创建一个likes至少有两列的表,例如like_postidlike_userid。现在,每次用户喜欢一个帖子时,都会在此表中创建一个新行,其中包含被喜欢的帖子的 id (post_idfrom的值)和喜欢该帖子posts的用户的 id ( from 的值user_id) 。users当然,您可以在likes表中输入更多列(例如,跟踪何时创建了点赞)。

您在这里所拥有的称为多对多关系。谷歌它以获取有关它的更多信息并找到有关如何正确实施它们的更多建议(您会发现逗号分隔的 id 列表不是最佳实践之一)。

根据评论更新:如果我是正确的;您想获得对某位艺术家进行投票的所有用户(按名称排序)的列表。你应该这样做:

SELECT Artists.Name, User.Name
FROM Artists
JOIN Votes
    ON Votes.page_ID = Artists.ID
JOIN Users
    ON Votes.Votes_Userid = Users.User_ID
WHERE Artists.Name = "dfgdfg"
ORDER BY Users.Users_Name

这里有一件奇怪的事情;您的投票表中包含艺术家 ID 的列似乎被调用page_ID。此外,您的列名有点不一致(不是很糟糕,但是如果您希望在将代码放置 6 个月后能够理解您的代码,请记住这一点)。在您的评论中,您说您只进行了一次连接,但实际上您进行了两次连接。如果您指定两个表名(就像您所做的那样:JOIN Users, VotesSQL 实际上连接了这两个表。

根据您在评论中发布的查询,我可以告诉您没有太多使用联接的经验。我建议你阅读如何使用它们,它会真正提高你编写好代码的能力。

于 2012-08-08T07:46:39.553 回答