所以我正在使用我的网站的一部分,用户可以在其中提升内容和降低内容,每个评级存储一行,其中upvote为+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)
答案 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的黑客。试试这个: