簡體   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