2016-05-10 50 views
0

我已經如何通過更新表PHP

subscription_complete subscription_pending通過

包含

id mag1 mag2 mag3 mag4 
4 100 0 100 0 

包含

id mag1 mag2 mag3 mag4 
4  100  

我有插入值以下命令

創建兩個表subscription_pending和subscription_complete替換數據庫值
$final_q= "INSERT INTO `subscription_complete` (`id`, `mag1`, `mag2`, `mag3`, `mag4`) VALUES ('".$row_q['id']."','".$row_q['mag1']."','".$row_q['mag2']."','".$row_q['mag3']."','".$row_q['mag4']."' 

我想在不更換它的價值,即100,我hvae寫下面的查詢

$final_q1= "update subscription_complete set mag1='".$row_q['mag1']."',mag2='".$row_q['mag2']."',mag3='".$row_q['mag3']."',mag4='".$row_q['mag4']."' where id='".$row_q['id']."'"; 

你能告訴我如何設置在剩餘的列,其中值是0值100來更新subscription_complete表?

預先感謝您!

+0

**警告**:使用手動轉義非常容易出錯,並且一個錯誤可能會導致一個嚴重的錯誤[SQL注入漏洞](http://bobby-tables.com/)。儘可能使用**準備好的陳述**。這些在['mysqli'](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和[PDO](http://php.net/manual/)中很簡單en/pdo.prepared-statements.php)其中用戶提供的數據是用'?'或':name'指示符指定的,後者使用'bind_param'或'execute'填充,具體取決於您使用的是哪一個。 – tadman

+0

爲什麼不把它保留在一個表上,並且使用-1或-100,因爲用戶沒有訂閱,如果掛起則爲0,如果完成則爲100?你也可以展示更多的PHP腳本。當然,你所要做的只是更新mag2而不是輸入所有的待處理完成? – Matt

+0

我不能區分如何更新什麼值,所以我已經使用更新整個表 –

回答

0

這裏假定subscription_pending中的空字段包含NULL,而不是空字符串。

UPDATE subscription_complete AS c 
JOIN subscription_pending AS p ON p.id = c.id 
SET c.mag1 = IFNULL(p.mag1, c.mag1), 
    c.mag2 = IFNULL(p.mag2, c.mag2), 
    c.mag3 = IFNULL(p.mag3, c.mag3), 
    c.mag4 = IFNULL(p.mag4, c.mag4) 

如果它們實際上是空字符串,使用IF(p.magX = '', c.magX, p.magX)代替IFNULL測試。

+0

我已經嘗試了兩種方式,但仍然不工作意味着沒有更新發生 –