2013-03-18 102 views
0

因此,我正在我的网站的一部分,用户可以提高和降低内容的一部分,这是存储一行评级与+1为upvote和 - 1为downvote。如果更新或插入行后MYSQL查询返回

我也将总共有upvote - downvotes的用户配置文件页面。这些票的总数将被存储在用户信息的mysql表中。

我的问题是,当有人投票的东西,让我们说一个downvote所以我减去一个用户配置文件的总票价。但是,如果用户改变了主意并修改了投票以使得最终值为正确,我必须实际添加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

您的查询需要查询后最大键之前采取的最大关键,如果他们是不同的,那么你做一个插入否则它是一个更新 – ITroubs 2013-03-18 21:48:51

+0

'插入或更换'? – Izkata 2013-03-18 21:49:27

+0

这就是为什么你不应该规范化你的数据库。 – 2013-03-18 21:51:53

回答

0

根据您当前的数据结构,我认为,而不是当他再次低估的时候,用户升高和降低2时平衡数据的黑客攻击。试试这个:

  1. 您必须先删除投票。
  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("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 
+0

所以,我试了这个,我添加了这个'$ last = mysql_query(“SELECT ROW_COUNT();”); $ result = mysql_fetch_array($ last); '在我查询后,但总是返回'0'。我似乎无法弄清楚我做错了什么。我忘记了什么吗? 感谢您的帮助 – 2013-03-19 07:39:15

+0

我添加了一个示例供您尝试。 – ckim 2013-03-20 01:59:00

相关问题