2012-03-30 8 views
0

私はPHPコードを作成しており、クエリの条件に問題があります。また、あなたが私のことを教えてもらえれば、Mysqlのストアドプロシージャを使ってこれを実現することができます。
私の仕事は、ユーザーの外部キーが存在しない場合にINSERTクエリを実行することです。ユーザーの外部キーが「User_ID」列に存在する場合は、それを更新します。
しかし、ここでは、データベース内のカラム 'User_ID'にユニークな条件を置くことができます。したがって、重複イベントはデータベースから発生しません。
次のクエリはこのエラーを示しています
SQL構文に誤りがあります。ユニークキーがUSER_IDは「23 NOT IN(ボイスメールFROM USER_IDを選択)WHEN ELSE UPDATEボイスメールSET URG」をライン3INSERT IF EXIST 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

は、あなたが(http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html [DUPLICATE KEY UPDATE INSERT ... ON]の後にあるのに役立ちます)? – cmbuckley

+0

Mysqlは、 'INSERT .. ELSE UPDATE ... 'をサポートしていません。単純に 'INSERT .. DUPLICATE KEY UPDATE ...'を実行するだけです。http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html – ajreal

+0

はい..!しかし、ここで私は、データベース内のカラム 'User_ID'にユニークな条件を置くことができます。だから、データベース –

答えて

0

に近い使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください?もしそうなら、あなたは、単にのようなクエリ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'に一意の条件を設定できます。データベースからの重複イベントは発生しません。 –

0

を使用することができます。すでに存在する場合には、値を置き換えます

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

存在しない場合は、新たに挿入します。

うまくいけば、それは

+0

@nhahtdh修正のおかげで – Saket

関連する問題