Php 在MySQL数据库中存储投票数据的最有效方法(如StackOverflow)

Php 在MySQL数据库中存储投票数据的最有效方法(如StackOverflow),php,mysql,voting-system,Php,Mysql,Voting System,我想复制SE的投票系统。我网站上的用户应该只能对帖子投票一次,然后他们就被锁定了。我目前有两个表,users和posts 我应该如何存储用户对哪些帖子投票的信息?我想在posts中设置一个列,存储投票用户的uids。另一个想法是在users中有一个列,列有他/她投票的帖子的ids 我该怎么做?我想考虑可伸缩性,并方便地确定投票是否有效。对于stackoverflow大小的东西,最佳做法是将单个投票存储在单独的表中。但也要在直接附加到帖子的字段中保留派生的投票计数。随着数据库规模的增长,汇总每次查

我想复制SE的投票系统。我网站上的用户应该只能对帖子投票一次,然后他们就被锁定了。我目前有两个表,
users
posts

我应该如何存储用户对哪些帖子投票的信息?我想在
posts
中设置一个列,存储投票用户的
uid
s。另一个想法是在
users
中有一个列,列有他/她投票的帖子的
id
s


我该怎么做?我想考虑可伸缩性,并方便地确定投票是否有效。

对于stackoverflow大小的东西,最佳做法是将单个投票存储在单独的表中。但也要在直接附加到帖子的字段中保留派生的投票计数。随着数据库规模的增长,汇总每次查看一篇文章的所有投票将变得非常昂贵


通过在此用户/投票表上使用触发器,保持此派生字段相对容易。

创建另一个表以存储来自
用户
帖子
表的信息:

创建表格投票(
用户id INT
,post_id INT
,主键(用户id,发布id)
);
采用这种方法:

我正在考虑在帖子中设置一个专栏,存储投票用户的UID。另一个想法是在用户栏中设置一个列,列上他/她投票的帖子的ID

除非您将这些值存储为分隔值(以适合一个单元格)或JSON,否则一篇文章的结果将是多行。但是,这是一个糟糕的开始

坚持创建一个新表,其中包含决定“投票”的关系。该表非常简单,可以检查:

选择COUNT(t1.post\u id)作为投票计数
投票结果为t1
哪里
t1.user\u id=某个\u整数
t1.post_id=某个_整数

这是否意味着
投票
表中每个帖子都有几个条目?比如
29,user1
29,user2
28,user1
29,user3
?其中数字是post
id
,其余是用户名?是的,这就是它的工作原理——这对你不利吗?如果是这样的话,你能告诉我们为什么,以防有其他方法可以使用吗?。。我只是想重申一下(虽然你刚才提到了一个例子),但要考虑的一件事是:>使用你的<代码>主键>用户和<代码> POST <代码>表,作为投票> <代码>中的列。我只是想确保我完全理解:)我目前正在
post
表中的一个字段中存储总投票数。谢谢你的提示,它肯定会帮助其他在这个问题上遇到困难的人。