2012-04-30 16 views
1

質問に回答した100人のユーザーのプールがあります。これらのユーザーの約10%しか正解を選択しません。MySQLで多数の行を効率的にINSERTするには?

私は自分のユーザ名と、彼らが提供する間違った答えで、間違った答えが90%の一人一人のための行で、新しいテーブルを作成します。

それを行うための最善の方法は何ですか?

最初に間違った答えを入力したユーザー名の配列を作成し、ループごとにINSERT MySQLを使用してforeachループを作成する必要がありますか?

または「右答えていない人すべてに適用」アプローチを取得するためのMySQLの方法は何ですか?

ありがとうございます。よろしく

+0

あなたは同じで、すべての答えを得るのですか時間?だから、1回のリクエストで? – Zombaya

+1

私はあなたが準備された声明を使うことができたと言います。 'foreach'の中で、あなたはその文を実行します。あるいは、INSERTは単一のSQLクエリで複数の行をサポートします。 –

+0

こんにちは、はい、私はすべてのユーザーが答えたときにのみ、このコマンドを適用するので、1回限りのコマンドです。 – alexx0186

答えて

2

のようなので、あなたはすべてのユーザーとの回答を格納するテーブルを持っていると仮定すると:

Table : all_answers 

    user_id | answer 
    joe   a 
    mary  b 
    john  c 

、正しいを答えはcです。wrong_answersという類似のテーブル(同じスキーマ)を作成し、それを次のように設定することができます。

INSERT INTO wrong_answers 
     SELECT user_id, answer FROM all_answers WHERE answer <> `c` 

あなたやビューのためにこれを行うためのトリガを作成することもできます。

あなたは(たとえば、主キーなど)wrong_answersに保存されている他の値を持っている場合、あなたは、移入とても好きにwrong_answersにどの値を示したいと思うだろう:

INSERT INTO wrong_answers (user,answer) 
    SELECT user, answer FROM answers 
    WHERE answer <> 'c'; 
+0

ご回答いただきありがとうございます。 'wrong_answers'テーブルの場合、列の順序は' idprimary'、 'username'、' answer'となります。私はどこかでNULLを使用する必要がありますか? Thanks a lot – alexx0186

+0

'idprimary'が自動インクリメントの場合、値を指定する必要はありませんが、2番目のフィールドだけをフィールドに入れることを指定する必要があります。私はただちに更新します。 – Anthony

+0

こんにちは、ありがとうございました。よろしく – alexx0186

0
insert into new_table 
select (username from old_table where got_it_wrong = 1) 
2

はそうのように、マルチ挿入SQLクエリを使用します。

INSERT INTO table1 (col1, col2) VALUES (1, 2), (6, 9), (7, 8) 

これはあなたが単一のクエリ内に必要しかし、多くの行を挿入できるようになります。

+0

こんにちは、お返事ありがとうございます。あなたの例のVALUES部分では、私は各ペアの最初の数字がユーザー名であり、2番目の数字が答えになると仮定します。あれは正しいですか?ありがとうございます – alexx0186

+0

はい、あなたは正しいです!ですから、 'TABLE1に挿入します(ユーザ名、答)VALUES(「ニック」、「何か」)のような何かをするだろう、(「アレックス」、「何か他のものは、」)' – nickb

3

単一のインサートの多くを行うための最も簡単な方法は次のとおりです。

INSERT DELAYED 
+2

そして、ここでは参照です:のhttp://dev.mysql .com/doc/refman/5.5/ja/insert-delayed.html – inhan

関連する問題