1

現在、デジタル モバイル ロイヤルティ アプリを開発していますが、mysql コードのクエリで問題に直面しています...

私は4つのテーブルを持っています:Customer, Card, Redemption, Merchant

現在、私がやろうとしているのは、顧客が償還を行っているときに、顧客が特定の商人のロイヤルティカードを持っているかどうかを最初にチェックすることです。

  • はいの場合、彼らはそのまま続行できます
  • いいえの場合、システムはカードを作成して続行します

引き換えコードは販売者によって生成されます...

問題は、そのために自分のコードをどのようにクエリすればよいですか?

Customer

 - Customer_ID
 - C_Email
 - C_Password
 - C_Name

Card

 - Card_ID
 - Chop_Amt
 - Customer_ID*
 - Merchant_ID*

Merchant

 - Merchant_ID
 - Merchant_Name

Redemption

 - Red_ID
 - Red_Code
 - Card_ID*
 - Merchant_ID*

私は今、自分のコードを書いてみました.誰かが私をチェックするのを手伝ってもらえますか?

select * 
from customer customer 
join card card 
  on customer.customer_id = card.customer_id 
join redemption redemption 
  on card.merchant_id = redemption.merchant_id 
where card.merchant_id = redemption.merchant_id and
      redemption.red_code = 'A002'
4

1 に答える 1

1

マーチャント/顧客エントリのカード テーブルに一意のインデックスを配置することをお勧めします。このアプローチを使用する場合は、INSERT INTO ... ON DUPLICATE KEY UPDATE id = id を実行できます。これにより、関係なくレコードが存在することが保証されます。

インデックスを作成するには、次の操作を行います

CREATE UNIQUE INDEX customer_merchant ON Card (Customer_ID, Merchant_ID);

これで、新しい行が既に存在する場合、新しい行は挿入されません。

INSERT INTO Card (Chop_Amt, Customer_ID, Merchant_ID) VALUES(0.00, 1, 1) ON DUPLICATE KEY UPDATE Card_ID = Card_ID

UPDATE Card_ID = Card_ID 部分は、Card_ID をそれ自体に設定しているため、単に「何もしない」ためのエイリアスです。

于 2013-05-18T15:18:33.360 に答える