2013-03-18 95 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

相關問題