SQL Upvote Downvote系统

时间:2015-08-05 11:21:00

标签: php mysql database

我目前正在建立一个论坛,其中帖子需要有一个upvote / downvote系统。

我当前的sql(phpmyadmin)结构是这样的:

Table 1 (posts)
| post_id | post_title | post_score |

Table 2 (pvotes)
| pvote_id | fk_post_id | fk_user_id | pvote_score |

我想以某种方式制作post_score(在表1中),找到所有pvote_score(表2)列并将它们一起加/减,其中fk_post_id(表2)= = post_id(表1)

这样我希望制作一个只允许每个用户投票一次的投票系统,并自动从pvote_score值计算帖子post_score。

示例: user_1 upvotes post_1在表2中插入: | (pvote_id)1 | (fk_post_id)1 | (fk_user_id)1 | (pvote_score)1 |

我现在想要post_score(表1)来查找表2中的所有条目,其中: fk_post_id与post_id相同,然后在pvote_score中添加或减去值,并将总和作为post_score的NEW值。

我试图让它像stackoverflows一样拥有upvote / downvote系统。

编辑1

问题:

我想知道如何让post_score列自动添加/减去pvotes_score中的值并将总和显示为其值?

1 个答案:

答案 0 :(得分:0)

我已经创建了这样的数据库结构:

CREATE TABLE `posts` (
  `post_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `post_title` varchar(50) DEFAULT NULL,
  `post_score` int(11) DEFAULT NULL,
  PRIMARY KEY (`post_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

INSERT INTO `posts` VALUES (NULL, 'test', 0), (NULL, 'test2', 0);

CREATE TABLE `pvotes` (
  `pvote_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `fk_post_id` int(11) DEFAULT NULL,
  `fk_user_id` int(11) DEFAULT NULL,
  `pvote_score` int(11) DEFAULT NULL,
  PRIMARY KEY (`pvote_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

INSERT INTO `pvotes` VALUES (NULL, 1, 0, 2), (NULL, 1, 0, 3), (NULL, 1, 0, -1), (NULL, 2, 0, 2);

这是应该解决问题的查询:

UPDATE posts SET post_score = (SELECT SUM(pvote_score) FROM pvotes WHERE fk_post_id = post_id);

我得到的结果是:

  

post_id | post_title | post_score

     

1 |测试| 4

     

2 | test2 | 2