繁体   English   中英

在MYSQL查询之后,返回是否更新或插入了行

[英]After MYSQL query return if the row was updated or inserted

因此,我正在网站的一部分上工作,用户可以在其中上,下内容,该内容存储为每个级别一行,其中+1表示赞成,-1表示反对。

我还将总共upvote - downvotes用户个人资料页面的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)

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("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

根据您当前的数据结构,我认为不是当用户投票时添加2来平衡数据,而当用户再次投票时减去2来平衡数据的技巧。 尝试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM