php - Like按钮的数据库构建(如Facebook Like或Google +1)

标签 php mysql facebook-like

我想了解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/

相关文章:

javascript - 是否可以在 iframe 中使用类似 Facebook 的按钮?

facebook - 带有layout=button_count的点赞按钮会超出默认的90px

php - 交响乐 : should logic about formatting a parameter be in repository or controller?

javascript - 如何在 Wordpress 的 functions.php 中编写 Javascript 函数?

php - 对于 SQL 查询返回的每个结果,我想给出一个不同的名称

MYSQL select所有数据表a if子句表b满足

javascript - Uncaught Error : No version specified facebook sdk

PHP SoapClient - 无法从外部实体加载 SOAP 错误 fatal error

php - 如何在 URL 中隐藏文件路径?

mysql - 按字段类型时间戳获取 SELECT MySQL 中的一天数据