如果行已更新或插入,则返回MYSQL查询

时间:2013-03-18 21:47:28

标签: php mysql insert sql-update sql-insert

所以我正在使用我的网站的一部分,用户可以在其中提升内容和降低内容,每个评级存储一行,其中up​​vote为+1,downvote为-1。

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

我的问题是,当有人投票时,让我们说一个downvote,所以我将一个减去用户个人资料上的投票总值。但是如果用户改变主意并将投票修改为upvote以使最终值合适,我必须实际添加2(+1以补偿-1而另一个+1用于upvote)

$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)

2 个答案:

答案 0 :(得分: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语句,如果将行作为新行插入,则affected-rows值为1,如果更新现有行,则为2。

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

$mysql = mysql_connect(":/tmp/mysql.sock", "ckim", "");
mysql_select_db("test");
mysql_query("drop table if exists 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

答案 1 :(得分:0)

根据您当前的数据结构,我认为不是在用户upvote时添加2以平衡数据而在再次下降时减去2的黑客。试试这个:

  1. 您必须先删除投票。
  2. 然后投下另一票进行更改。