2009-08-14 5 views
-1

私はこのからの回答を使用したユーザ名のリストを抽出しています私は挿入を選択するか、挿入をループスルーする必要がありますか?

how to optimize mysql query if i have too many OR operators in my query?

今私は別の問題を持っています。私は友人のテーブルを2列だけで構成し、リクエスタとバディはどちらも複合プライマリキーを形成します。

私は上記の質問を使用して、特定のユーザーのためのFacebookの友達の配列を持っていると仮定します。

どのように私は自動的に私のWebアプリケーションで友達にするのですか?

つまり、「usera」というユーザーの5人の実際の友達がいる場合です。私は10の挿入ステートメントを実行する必要があります。

例:friendA、usera、usera、friendA friendAがuseraのフレンドとして反映されるようにします。

私は、挿入の選択が効率的であることを理解しています。残念ながら、これらの友人のユーザ名のリストは、私の上記の質問で仲間のSOのメンバーによって提案されたIN句を使用して値のPHP配列を介して取得されます。

どうすればよいですか?

名前を通るiは

A)ループ必要があり、ステップごとに2つのINSERTステートメントを実行しますか?

b)insert selectを使用しますか?それを正確に行う方法は?

私のDBは、このように設計されています

1表には、ユーザ名が主キーとfb_uidがNULL可能であり、ユーザ名とfb_uidを持つユーザーと呼ばれます。

1つのテーブルは、リクエスタと呼ばれる列を持ち、もう1つの列はバディと呼ばれます。どちらの列も複合キーを形成します。

友人テーブルに次のデータ(usera、userb)と(userb、usera)があると、2人のユーザー(usera、userb)間で友だちが確立されます。

ありがとうございます。

答えて

1

いつでも一括挿入できます。

INSERT INTO friends (user_id, friend_user_id) VALUES (1, 2), (2, 1) 
+0

バルクインサートを使用するとパフォーマンスに問題がありますか?私はPHPを使用し、単一の一括挿入を構築するためにループを実行することを確信しています。私はまた、挿入を無視して挿入するか、遅延を挿入する必要がありますか? –

+0

バルクインサートは一般的に通常のインサートよりも高速ですが、唯一の欠点は値の数に制限があることです(私は信じています)。 –

+0

バルクインサートの途中で重複レコードがある場合はどうすればよいですか?それが放棄される前に成功した挿入物は捨てられるでしょうか? –

0

私はINSERT SELECTのとなるだろう、あなたはdetailed syntax hereを見つけることができます。

+0

あなたはこれを提案していますか?インサートセレクトがIN節と組み合わされていても? (value1、value2、...) –

+0

あなたのDBがどのように設計されているのか分かりません。 –

+0

私の質問を編集し、私のDBスキーマのアイデアを追加しました。 –

関連する問題