customers
次のフィールドとレコードを含むテーブルがあるとします。
id first_name last_name email phone
------------------------------------------------------------------------
1 Michael Turley mturley@whatever.com 555-123-4567
2 John Dohe jdoe@whatever.com
3 Jack Smith jsmith@whatever.com 555-555-5555
4 Johnathan Doe 123-456-7890
このテーブルに関連する外部キーを持つ、、orders
などrewards
の他のいくつかのテーブルがあります。receipts
customer_id
customers.id
ご覧のとおり、彼らの無限の知恵の中で、私のユーザーはJohn Doeの重複レコードを作成しました。これには、一貫性のないスペルと欠落したデータが含まれています。管理者はこれに気づき、顧客2と4を選択して、[マージ]をクリックします。次に、各フィールドなどに対して正しい値を選択するように求められ、PHPは、マージされたレコードが次のようになると判断します。
id first_name last_name email phone
------------------------------------------------------------------------
? John Doe jdoe@whatever.com 123-456-7890
Doe氏がいくつかの注文を出し、報酬を獲得し、領収書を生成したと仮定します。ただし、これらの一部はID 2に関連付けられており、一部はID4に関連付けられています。マージされた行は他のすべての外部キーと一致する必要があります元の行と一致したテーブル。
これが私が何をすべきかわからないところです。私の本能はこれを行うことです:
DELETE FROM customers WHERE id = 4;
UPDATE customers
SET first_name = 'John',
last_name = 'Doe',
email = 'jdoe@whatever.com',
phone = '123-456-7890'
WHERE id = 2;
UPDATE orders, rewards, receipts
SET customer_id = 2
WHERE customer_id = 4;
それはうまくいくと思いますが、後でcustomer_id外部キーを持つ別のテーブルを追加する場合は、戻ってそのテーブルをマージ関数の2番目のUPDATEクエリに追加することを忘れないでください。そうしないと、整合性が失われるリスクがあります。
これを行うには、より良い方法が必要です。