[英]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.