mysql挿入問題の単純な解決策を探しています。問題は次のとおりです。MYSQLテーブルAのカラム値に応じてテーブルAをテーブルBとC(外部キーでリンク)に挿入します
私は、部署と机で構成される組織データベースをまとめています。部門にはn個のデスクがある場合とない場合があります。
部門と机の両方に、机の外部キーによって部門内の関連するレコード(つまりpk)にリンクされた独自のテーブルがあります。私はすべての新しい部門データ(nレコード長い)を配置するために使用する一時テーブルを持っています...このテーブルでは、部門のデスクレコード数は直下の部門レコードに従います。 TEMPテーブルでは、department_nameカラムに値がある場合はそれが部門であり、そうでなければカラムデスクの値を持つため、上記の部門に関連するデスクになります。私が言ったように、あなたが次の部署の記録に行くまで、いくつかの机の記録があるかもしれません。 TEMPから
、に部署テーブルに部門や自分のデスクを挿入します。ここでは
はTEMP{Department,Desk main_telephone, telephone2, telephone3, email, email2, website}
departments(department, telephone1, telephone2, telephone3, email, email2, website)
desks(Desk, foreignkey=Department id, telephone1, telephone2, telephone3, email, email2, website)
オクラホマので、私は何をしたいのか、以下であるテーブルのレコード
のサンプルです関連する部門のIDに机のレコードに外部キーを生成する机のテーブル。ここでは、私は一瞬
INSERT INTO departments(department,main_telephone,telephone2,telephone3,main_fax,website,email,email2)
SELECT Department,Tel1, Tel2, Tel3, Fax, Email, Email2, Web
FROM temp WHERE Department != '';
SELECT @last_department := LAST_INSERT_ID();
INSERT INTO department_desks(department_id,department, telephone, extension, telephone2, extension2, telephone3, extension3, fax, email)
SELECT @last_department, Desk,Tel1, Ext1, Tel2, Ext2, Tel3, Ext3,Fax, Email
FROM temp WHERE Desk != '';
これは、したがって、すべての机が同じDEPARTMENT_IDを持って、LAST_INSERT_IDはなステートメントINTO上記のINSERTで生成された最初のIDを返すことを除いて作品に持っているものであり、私はIDが必要です部門に対する...擬似っぽいコードで
:
for each record in TEMP table
if Department
INSERT the record into Departments
get the id of the newly created Department record and store it somewhere
else if Desk
INSERT the desk into the desks table with the relevant departments id as the foreignkey
ノート再びすべての部門が机こと直接
多くのおかげで
idがauto_incrementフィールドであると仮定します。 – jun
はい、申し訳ありませんが、idは自動インクリメントです。私の例では、テーブルBは部署テーブルであり、テーブルCはデスクテーブルです。ある部門が部署にそれを貼り付けると、表Aの列をテストしたいのですが、それに続くデスクが表Bの部門レコードに外部キーを付けてテーブルデスクに貼り付けていれば – Chez