![](/img/trans.png)
[英]PHP mysql_query Select fails to return row that was just inserted
[英]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来平衡数据的技巧。 尝试这个:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.