2011-01-08 14 views
0

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 

ノート再びすべての部門が机こと直接

多くのおかげで

答えて

0

表A {ID、DEPT、デスク}

表B {ID、ForeignKeyの、DEPT}

は、(BにIDを挿入する一時テーブルに部門に従っforeignkey、dept)Aからnull、id、deptを選択します。

+0

idがauto_incrementフィールドであると仮定します。 – jun

+0

はい、申し訳ありませんが、idは自動インクリメントです。私の例では、テーブルBは部署テーブルであり、テーブルCはデスクテーブルです。ある部門が部署にそれを貼り付けると、表Aの列をテストしたいのですが、それに続くデスクが表Bの部門レコードに外部キーを付けてテーブルデスクに貼り付けていれば – Chez

0

[OK]をクリックします。ストアドプロシージャを作成してカーソルを使用する必要があります。私は進捗状況を報告します。

関連する問題