总结:在FB上存储类似于类似系统的信息的最有效方法是什么。 Aka,喜欢的人保留,喜欢它的人等。
它需要与用户ID相关联,以便知道谁喜欢它。问题是,你是否有一个列以逗号分隔的列表中列出了所喜欢的事物的id,或者你是否为每个列都有一个单独的列(方式太多列)。存储的信息将是一个布尔值(1/0),但需要与用户以及所喜欢的“页面”相关联。
我的想法是:
列名=喜欢例如:
1,2,3,4,5
Aka,用户“喜欢”id为1,2,3,4和5的页面。要计算总“喜欢”,需要进行计数,然后将其存储在与页面本身(表已存在)。
这对我来说似乎是最好的方式,但有没有人能想到的更好的选择?
P.S。我不喜欢FB喜欢,但这是最简单的解释。
编辑:类似于stackoverflow上的加/否的想法。
答案 0 :(得分:3)
在这种情况下,最好的方法是创建一个新表来跟踪喜欢的内容。假设您有一个表posts
,其中包含一列post_id
,其中包含所有帖子(用户可以在其上投票)。并且您有另一个表users
,其中包含user_id
列,其中包含所有用户。
您应该创建一个至少包含两列的表likes
,例如like_postid
和like_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实际上连接了这两个表。
根据您在评论中发布的查询,我可以告诉您使用联接的经验不多。我建议你阅读如何使用它们,这将真正提高你编写好代码的能力。