商店投票信息 - 数据库大纲

时间:2012-08-08 07:07:48

标签: mysql database data-structures

总结:在FB上存储类似于类似系统的信息的最有效方法是什么。 Aka,喜欢的人保留,喜欢它的人等。

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

我的想法是:

列名=喜欢例如:

1,2,3,4,5

Aka,用户“喜欢”id为1,2,3,4和5的页面。要计算总“喜欢”,需要进行计数,然后将其存储在与页面本身(表已存在)。

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

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

编辑:类似于stackoverflow上的加/否的想法。

1 个答案:

答案 0 :(得分:3)

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

您应该创建一个至少包含两列的表likes,例如like_postidlike_userid。现在,每当用户喜欢帖子时,在此表格中创建一个新行,其中包含所喜欢的帖子的ID(来自post_id的{​​{1}}的值)和用户的ID(值的值)来自posts的{​​{1}}喜欢帖子。当然,您可以在user_id表中输入更多列(例如,跟踪创建类似内容的时间)。

你在这里所谓的many-to-many relationship。谷歌它可以获得更多关于它的信息,并找到关于如何正确实现它们的更多建议(你会发现一个逗号分隔的id列表将不是最好的做法之一)。

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

users

这里有一件奇怪的事;您的投票表中包含艺术家ID的列似乎被称为likes。你的列名也有些不一致(不是很糟糕,但如果你想在6个月后独自理解你的代码,请记住一些事项)。在您的评论中,您说您只进行了一次加入,但实际上您只进行了两次加入。如果指定两个表名(就像你这样做: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 SQL实际上连接了这两个表。

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