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 回答