2012-03-30 64 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