2012-09-15 16 views
6
私は私のISPでホストのMySQL 5.1を使用してい

をEXISTS。これは私のクエリです構文エラーは、UPDATE ELSE INSERT

エラーが私の実際のタスクが

WHERE title_1='$title_1' AND title_2='$title_2' AND version='$version' ...ETC... 

を必要とするが、私は解決の私の問題のために、物事簡単にするため、それを下に減少している

... check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS(SELECT * FROM licensing_active WHERE title_1='Title1') THEN ' at line 1 

ある

mysql_query(" 
IF EXISTS(SELECT * FROM licensing_active WHERE title_1='$title_1') THEN 
    BEGIN 
     UPDATE licensing_active SET time='$time' WHERE title_1='$title_1') 
    END ELSE BEGIN 
     INSERT INTO licensing_active(title_1) VALUES('$title_1') 
    END 
") or die(mysql_error()); 

これについての私の検索では、私は「重複キー更新」への参照を見ていますが、どのようなtそれで?

答えて

19

を参照してください。それを試して、シンプルで簡単なソリューションです。

$result = mysql_query("SELECT * FROM licensing_active WHERE title_1 ='$title_1' "); 

if(mysql_num_rows($result) > 0) { 
    mysql_query("UPDATE licensing_active SET time = '$time' WHERE title_1 = '$title_1' "); 
} 
else 
{ 
    mysql_query("INSERT INTO licensing_active (title_1) VALUES ('$title_1') "); 
} 
+2

それは私のために働く、ありがとう。理解して覚えているように思えます。それは超効率的ではないかもしれませんが、これはまだ高トラフィックのアプリケーションではありませんので、この方法は1年以上は問題ありません。ありがとうございました。 – Openstar63

14

これがあなたのためにトリックを行う必要があります。

insert into 
    licensing_active (title_1, time) 
    VALUES('$title_1', '$time') 
    on duplicate key 
     update set time='$time' 

これはtitle_1は、あなたのテーブル内の(データベースによって強制)一意の列があると仮定しています。

​​は最初に新しい行を挿入しようとしますが、キーが停止して挿入が拒否された場合は、代わりに特定のフィールドを更新できます。

+0

こんにちはFluffeh。 title_1は一意ではありません。私が持っている唯一のユニークな列は、idという名前のintです。 'auto_increment'、 'unique'、 'primary'に設定されています。私は直接それにアクセスしません。同じエラーでまだ苦労しています。 – Openstar63

+0

ダークウィッシュが説明したように、私はPHPでロジックを実行しました。しかし、ありがとう。 – Openstar63

+0

は、私が最後に 'set'を削除したときに動作します。すなわち、 ' '= COL2 DUPLICATE KEY UPDATE ON

(COL1、COL2)VALUES( 'F1'、 'F2')。INSERT INTO –