我想了解Facebook like、Google+1等点赞按钮的数据库构建。
点赞按钮是社交网站的常见元素。用户可以对消息点赞和点赞,以表达对消息的支持。
系统必须检测用户之前喜欢或不喜欢此消息,以向用户显示不喜欢或喜欢按钮以供单击。
但是这个函数是如何工作的,数据库的构建又是怎样的呢?
我想出了这个方法:
每条消息/帖子都有一个点赞列,用于保存序列化的用户点赞数据。
Post table
id content like(serialized user_id)
1 hi world a:4:{i:0;i:234;i:1;i:32;i:2;i:423;i:3;i:4215;}
2 this is a good day a:2:{i:0;i:2324;i:1;i:342;}
并在输出帖子之前反序列化并检测user_id
while($row=mysql_fetch_row($sqlresult))
{
$like_data_array = unserialize($row['like']);
if( in_array( $user_id , $like_data_array ) )
{
echo 'you liked this post';
echo '<button>unlike</button>';
}
else
{
echo '<button>like</button>';
}
}
但是我认为这种方法对于大量的点赞来说太慢了。尤其是该帖子获得了超过 100,000 多个点赞。
有没有更高效的设计?
最佳答案
在规范化数据库中,这件事是使用三个表完成的:
用户 - 包含列:id、名称等
帖子 - 包含列:id、内容等
喜欢 - 包含列:user_id、post_id(user_id 是来自用户的外键,post_id 是来自帖子的外键)
因此,如果您想查看用户是否喜欢某个帖子,您可以执行如下命令:
SELECT * FROM likes WHERE post_id = 123456 AND user_id = 1000
关于php - Like按钮的数据库构建(如Facebook Like或Google +1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7213793/