我目前正在建立一个论坛,其中帖子需要有一个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
中的值并将总和显示为其值?
答案 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