&引用;例如;系统php/mysql

&引用;例如;系统php/mysql,php,mysql,performance,Php,Mysql,Performance,我正在尝试制作一个php/mysql版本的like或upvote系统。我基本上知道如何做到这一点,并看到了其他线程如何做到这一点。唯一的问题是我不想让用户喜欢这种状态不止一次。我想知道做这件事最有效的方法是什么 我有几个选择,所以你知道我已经考虑过了,但也许你可以告诉我什么是最好的/建议找到一个更好的方法: 1) 在数据库中,我可以存储一列,该列只存储所有喜欢此状态的用户的字符串表示形式。这样,当我查询喜欢的状态/数量时,我也可以得到该字符串,标记它并检查用户是否在其中。如果没有,请添加一个li

我正在尝试制作一个php/mysql版本的like或upvote系统。我基本上知道如何做到这一点,并看到了其他线程如何做到这一点。唯一的问题是我不想让用户喜欢这种状态不止一次。我想知道做这件事最有效的方法是什么

我有几个选择,所以你知道我已经考虑过了,但也许你可以告诉我什么是最好的/建议找到一个更好的方法:

1) 在数据库中,我可以存储一列,该列只存储所有喜欢此状态的用户的字符串表示形式。这样,当我查询喜欢的状态/数量时,我也可以得到该字符串,标记它并检查用户是否在其中。如果没有,请添加一个like并将它们连接到字符串

2) 创建一个存储键值对的新表。因此,如果user1喜欢user2状态,那么它会将一行[user1,user2]添加到表中,如果他们再次尝试喜欢它,它会检查该行是否存在并且不允许。然而,我认为这可能是有问题的,因为如果在给定的时间有1000个状态,每个人都“喜欢”所有999个其他状态,那么我的表现在有将近一百万行,需要在检查他们是否喜欢它时存储和查询。

我为自己的公司制作了一个类似的系统。这就是我所做的:

我有一个喜欢的表,其中有以下信息:id、用户、喜欢的数量

用于计算行数的id、用于跟踪用户id的用户以及用于跟踪用户喜好的编号。例如,如果你喜欢文章

你可以有一个文章的表格:id,article\u id


现在,只要有一个like按钮,它可以将信息插入到likes中,其中number\u likes与article\u id匹配。

您的选项(1)是我过去的做法,这很好,但需要用户登录。对于匿名的“喜欢”你也会做同样的事情,但是使用IP地址而不是用户ID。搜索10亿行,每个行有两个int列,要比压缩字符串和搜索压缩字符串快得多。数据量并不明显高于csv列表中的方法1(请参见
FIND\u IN\u SET
btw)。编码工作和维护可能是一样的。取消链接怎么样?如果它们被合并,您将不得不更新该行,使用方法2添加、删除和选择,而不考虑还有什么其他内容。