2012-03-30 35 views
0

我在寫PHP代碼並遇到查詢條件問題。另外如果你可以告訴我如何通過在Mysql中使用Stored Procedure來實現這一點,那將會非常好。
如果用戶外鍵不存在,我的任務是運行INSERT查詢。如果用戶foreign ke存在於「User_ID」列中,則更新它。
但是在這裏我可以在數據庫中的'User_ID'列上添加唯一條件。所以數據庫不會發生重複的事件。
以下查詢顯示此錯誤
您的SQL語法錯誤;檢查對應於你的MySQL服務器版本在3號線INSERT IF EXIST UPDATE使用PHP和存儲過程的表

$result=mysql_query("select * from Users",$con); 
while($row= mysql_fetch_array($result)) 
{ 
    $info=getVM($row['Ext'],$ast); 
    $info[3]=$row['User_ID']; // To insert User_ID from Users table 
    $query="INSERT INTO VoiceMail (Urgent, New, Old, User_ID) 
      VALUES ($info[0],$info[1],$info[2],$info[3]) 
      WHEN $info[3] NOT IN (SELECT User_ID FROM VoiceMail) 
      ELSE UPDATE VoiceMail SET Urgent=$info[0], New=$info[1], Old=$info[2] WHERE User_ID=$info[3]"; 
    if (!mysql_query($query,$con)) 
     { 
      die('Error: ' . mysql_error()); 
     } 
     else echo "Database Updated..!"; 
+0

你是在追求[INSERT ...對重複密鑰更新](http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html )? – cmbuckley 2012-03-30 22:38:03

+0

Mysql不支持'INSERT .. ELSE UPDATE ...'。你可以簡單地做'INSERT ..在DUPLICATE KEY UPDATE ...'http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html – ajreal 2012-03-30 22:38:15

+0

是的..!但在這裏我可以在數據庫中的'User_ID'列上添加唯一條件。因此,數據庫 – 2012-03-30 22:40:01

回答

0

使用近「時23分NOT IN(SELECT USER_ID從語音信箱)ELSE UPDATE語音信箱設置URG」正確語法手冊USER_ID的唯一密鑰?如果是這樣,你可以使用ON DUPLICATED KEY UPDATE

INSERT INTO VoiceMail (Urgent, New, Old, User_ID) 
VALUES ($info[0],$info[1],$info[2],$info[3]) 
ON DUPLICATE KEY UPDATE Urgent=values(Urgent), New=values(New), Old=values(Old) 
+0

不會發生重複事件,但在此我可以在數據庫中的'User_ID'列上添加唯一條件。所以沒有重複的事件會發生從數據庫 – 2012-03-30 22:42:12

0

只是簡單的查詢,如:

$query="REPLACE INTO VoiceMail (Urgent, New, Old, User_ID) 
     VALUES ($info[0],$info[1],$info[2],$info[3])"; 

如果存在,它將取代值,如果不存在,插入新。

希望這將有助於

+0

@nhahtdh感謝糾正 – Saket 2013-05-02 13:00:57