2011-09-18 12 views
0

毎時何千回もプッシュされるmany2manyテーブルがDBにあります。のは、それがどのように見えるとしましょう:多対多テーブルに行を挿入しますが、FK参照/サブクエリは避けてください

+-----------------------+ 
| pageNotes    | 
+-----+--------+--------+ 
| id | pageid | noteid | 
+-----+--------+--------+ 
| 1 | 37583 | 385839 | 
| 2 | 37583 | 385840 | 
| ... | ... | ... | 
+-----+--------+--------+ 

私はテーブルを更新したい場合は、私だけ(pageNotesテーブルにそのFKとしてpageidにを持つテーブルで、「ページ」で、)ページのURLを持っています。私は本当に私のコードでPKの検索をするために何万ものレコードをバッファリングすることを避けたいので、これを達成するためにサブクエリーを除いて別の方法があります。

は現在、クエリは次のようになります。ページが存在しない場合は、クエリが失敗するため

INSERT INTO 
    `pageNotes ` (id,pageid,noteid) 
    VALUES ('', 
     (SELECT id FROM pages WHERE url='http://www.test.com/index.html') 
     ,385841); 

これは、もちろん使用可能ではありません。私が探しているのは、pkをフェッチするか、FKテーブルに行を挿入する方法です。あなたのようにクエリを簡素化することができます

+0

、あなたは外部キーを得ることなく、外部キーを持つレコードを挿入するようにしたいですか?最適化したいクエリを使用していますか?それは私たちが質問をよく理解する助けになるかもしれません。 –

+0

基本的には、はい。上記の質問 – joostdevries

答えて

1

:だから

INSERT INTO `pageNotes` (id, pageid, noteid) 
SELECT '', p.id, 385841 
    FROM pages p 
    WHERE url = 'http://www.test.com/index.html'; 
+0

を参照してください。フォローアップの質問が1つあります。ページに行が見つからない場合は挿入するよう指定できますか? – joostdevries

+1

そうすることで、行が見つからない場合は挿入されないので、はいとなります。 –

+0

素晴らしい。ありがとう!行が挿入されていることを確認し、それ以外の場合は最初にページを挿入し、参照を挿入します。 – joostdevries

関連する問題