用户'信誉系统' - 检查用户是否已经为某人+1了?

时间:2014-09-07 17:54:18

标签: mysql sql

CREATE TABLE IF NOT EXISTS `User_Rep` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `USER_ID` int(11) NOT NULL,
  `REPPER_USER_ID` int(11) NOT NULL,
  `REP` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`ID`)
)

这是我当前的表,请忽略user_id的缺失外键,为简洁起见,不添加它们。

当用户决定代表某人时,会在该表中添加一条新记录,即

INSERT INTO `User_Rep` (`ID`, `USER_ID`, `REPPER_USER_ID`, `REP`) VALUES
(1, 72, 3, 1),
(2, 72, 3, 1),
(3, 72, 3, -1);

我可以使用以下查询提取任何特定用户代表:

SELECT SUM(REP) FROM User_Rep WHERE USER_ID = 72

但是,我正在努力设计适当的查询以确定特定用户是否已经对用户进行过投票或投票,以便用户界面可以做出相应的响应并执行相关操作(向上投票或向下投票)< / p>

当用户upvotes,downvotes,再次投票等等时会发生什么......现在表中有多个行?我怎么能找到相关的真/假?

对此有何帮助?

1 个答案:

答案 0 :(得分:0)

首先是改变你的桌子。我将删除现有的ID列,并在USER_ID和REPPER_USER_ID字段上创建UNIQUE索引。这样可以防止数据库首先允许重复,并且还可以大大加快下一部分的速度。

然后在代码中,您可以阻止投票功能/按钮可用:

SELECT 1 FROM `User_Rep` WHERE `USER_ID`=72 AND `REPPER_USER_ID`=3

要获得从3到72的实际投票,它将是:

SELECT `REP` FROM `User_Rep` WHERE `USER_ID`=72 AND `REPPER_USER_ID`=3

但要小心你在代码中如何使用它...如果你做一个简单的&#34;如果是真的&#34;测试你可能得到-1或0,然后任何真/假评估将返回FALSE,即使它已设置(零和负通常转换为&#34; false&#34;。

将其分配给代码中的属性/变量,然后您可以执行签入代码以检查评估。取决于您正在使用的内容:

的Python:

if has_voted:
    ...

PHP

if(has_voted==TRUE) {
    ...
}