2011-02-04 11 views
1

私は、顧客の電子メールアドレス、注文の連絡先情報、注文IDを記録した顧客注文を記載したInnoDBテーブルを持っています。このテーブルはinnodbを使用し、約2億2千万の行を含んでいます。私が持っていないのは、ユーザーをリストする表です。InnoDBを使用して外部キーを使用してテーブルを作成および設定する

私の注文テーブルにあるデータからcustomer_ide-mailのアドレスを含むテーブルを作成して作成することは、おそらく外部キーを使用して可能ですか?

これは私がこれまで持っているクエリです:

INSERT INTO customers (email, last_order) 
    SELECT (email_address, order_date) FROM orders 
ON DUPLICATE KEY 
    UPDATE last_order = MAX(order_date, last_order); 

私はこのクエリがデータベースを構築しますが、それは注文テーブルの行に顧客IDを入れていないだろう、と私は信じていますそれが最善のアプローチであるかどうかはわかりません。助言がありますか?

+0

失敗しない場合は、私によく見えます。 – Nishant

答えて

3

あなたは2つの段階で、このことを達成することができます:

第一、customers表に記入:

INSERT INTO customers (email, last_order) SELECT email_address, 
max(order_date) as last_order FROM orders GROUP by email_address; 

第二、顧客のIDを持つordersテーブルを更新するには、(あなたがcustomer_idフィールドと呼ばれていると仮定すると

UPDATE orders o SET customer_id = 
    (SELECT id FROM customers WHERE email = o.email_address); 

最後にordersテーブル)で、あなたのを維持したい場合テーブルに一貫性がある場合は、AFTER INSERT TRIGGERテーブルをordersテーブルに追加して、customersテーブルを最新の状態に保つことができます。

関連する問題