このようなレコードを多数作成したい場合(1人だけでなく10人のユーザーを登録する場合)はどうなりますか?私は次の解決策を見つけました(5つのクエリのみ):
ステップI:新しいデータを保存する一時テーブルを作成します。
CREATE TEMPORARY TABLE tmp (id bigint(20) NOT NULL, ...)...;
次に、このテーブルに値を入力します。
INSERT INTO tmp (username, password, bio, homepage) VALUES $ALL_VAL
ここでは、$ALL_VAL値のリストを配置する代わりに:( 'test1'、 'test1'、 'bio1'、 'home1')、...、( 'testn'、 'testn'、 'bion'、 'homen')
ステップII:データを「ユーザー」テーブルに送信します。
INSERT IGNORE INTO users (username, password)
SELECT username, password FROM tmp;
ここでは、既に一部のユーザーを許可する場合、「IGNORE」を使用できます。オプションで、このステップの前に、ステップIIIと同様のUPDATEを使用して、すでに内部にいるユーザーを見つける(およびtmpテーブルでマークする)ことができます。ここでは、そのユーザー名がPRIMARYusersテーブルのように宣言されていると仮定します。
ステップIII:更新を適用して、すべてのユーザーIDをユーザーからtmpテーブルに読み取ります。これは必須のステップです。
UPDATE tmp JOIN users ON tmp.username=users.username SET tmp.id=users.id
ステップIV:ユーザーの読み取りIDを使用して別のテーブルを作成する
INSERT INTO profiles (userid, bio, homepage)
SELECT id, bio, homepage FROM tmp