0

所以我正在开发我网站的一部分,用户可以在其中升级和降级内容,每个评级存储一行,+1 表示赞成,-1 表示反对。

我还将拥有一个upvote - downvotes用户个人资料页面。这些投票的总和将存储在用户信息的 mysql 表中。

我的问题是,当有人投票时,让我们说一个反对票,所以我在用户个人资料上的投票总价值中减去一个。但是,如果用户改变主意并将投票修改为赞成票以使最终值正确,我必须实际添加 2(+1 来补偿 -1 和另一个 +1 的赞成票)

$sql = "    
    INSERT INTO `votes`
    (
        `added_by`, 
        `value`,
        `post_id`,
        `ip_created`
    )  VALUES (
        '".$logedInUser['User_ID']."',
        '".$value."',
        '".$this->post_id."',
        '".ip2()."'
    )
    ON DUPLICATE KEY UPDATE `value` = '".$value."'
";
$db->sql_query($sql);

我知道我可以找到一种方法来做到这一点,但它需要一些其他的查询,我希望有一种方法可以在插入或更新时返回。(我知道查询只会返回 TRUE 或 FALSE)

4

2 回答 2

1

select row_count();事后马上做。

来自 MySQL 文档http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_row-count

对于 INSERT ... ON DUPLICATE KEY UPDATE 语句,如果将行作为新行插入,则受影响的行值为 1,如果更新现有行,则值为 2。

这是一个例子。它使用mysql_affected_rows()——我知道我知道 mysql_* 已被弃用。

$mysql = mysql_connect(":/tmp/mysql.sock", "ckim", "");
mysql_select_db(“测试”);
mysql_query("如果存在 my_table 则删除表");
mysql_query("create table my_table(id int primary key, val int)");

$result = mysql_query("insert into my_table values (1,1) on duplicate key update val = 2") or die (__FILE__.':'.__LINE__.": ".mysql_error()."\n");
echo mysql_affected_rows()."\n";

$result = mysql_query("insert into my_table values (1,1) on duplicate key update val = 2") or die (__FILE__.':'.__LINE__.": ".mysql_error()."\n");
echo mysql_affected_rows()."\n";

$result = mysql_query("insert into my_table values (2,1) on duplicate key update val = 2") or die (__FILE__.':'.__LINE__.": ".mysql_error()."\n");
echo mysql_affected_rows()."\n";
mysql_close();

输出是

1
2
1
于 2013-03-19T05:21:37.813 回答
0

根据您当前的数据结构,我认为不是在用户赞成时添加 2 来平衡数据,而在他再次反对时减去 2。尝试这个:

  1. 您必须先删除投票。
  2. 然后再次投票以进行更改。
于 2013-03-18T21:56:53.193 回答