2011-07-28 7 views
1

私はこれで自分のMINDを失っています。私は3つのテーブルを持っていますが、3つのカラムに既存の値がない場合にのみ、データベースに挿入する必要があります。私はON DUPLICATE KEY UPDATEWHERE NOT EXISTS、そして最後にINSERT IGNOREを試してみましたが、同じ値が存在しても他のものが挿入されるようなものはありません。私はVALUESが存在しない場合はINSERT

insert into TABLE name: set_colors (school_art_id, baseimage_id, sub_folder, layer) 

school_art_idにしようとしています

は、「ID」から別のテーブルにはschool_art baseimage_idと呼ばれているテーブルから「ID」がbaseimage sub_folderと呼ばれるbaseimage.sub_folder 層にフォルダ名が値でありますbaseimage.layer

これは動作しないクエリです。

INSERT IGNORE INTO set_colors (school_art_id, baseimage_id, sub_folder, layer) 
SELECT 'school_art.id', 'baseimage.id', 'baseimage.sub_folder', 'baseimage.layer' 
SET school_art_id='school_art.id', 
baseimage_id='baseimage.id', 
sub_folder='baseimage.sub_folder', 
layer=baseimage.layer 

ここで間違っていることを教えてもらえますか?

答えて

0
INSERT IGNORE 

INSERT IGNORE INTO 

する必要がありますしかしSETはあなたのクエリ構文が完全に選択部分のために壊れている

+0

。クラスを呼び出してありがとうと私はすべての興奮が、まだ、任意の他のアイデアは? – GGcupie

+4

(か[INSERT]をご覧に動作していないhttp://dev.mysql.com/doc/refman /5.5/en/insert.html)ステートメントは – genesis

+0

のようになります。実際には、SETをINSERT INTO – technology

2

INTOクエリSELECTまたはINSERTで使用することはできません。一連の定数文字列を選択していて、なんらかの理由で 'SET'に入っていくつかの割り当てをします。あなたがセレクトに値を設定しないので、これは意味をなさない。

誰が{$値は}ちょうどその時に渡されたので、(私はクラスでこれを入れても同じ問題に遭遇した場合にあなたのクエリが

INSERT IGNORE INTO set_colors (school_art_id, baseimage_id, sub_folder, layer) 
SELECT field1, field2, field3, field4 
FROM some_other_table 
WHERE ... 
0

ようになるはずまあ、私は、解決策を見つけましたあなたは

INSERT IGNORE INTO set_colors (school_art_id, baseimage_id, sub_folder, layer) 
SELECT school_art.id, baseimage.id, baseimage.sub_folder, baseimage.layer 
FROM school_art 
JOIN baseimage ON baseimage.base_folder = school_art.series_code 
WHERE baseimage.image_type = 'B' AND school_art.id = '{$value}' ORDER BY school_art.id" 
関連する問題