在同一用户的地址列表中获取默认地址的存储过程



我的用例是为一个客户存储多个地址,并能够将单个客户的地址指定为客户的默认地址。

我有三张桌子;customer(包含客户详细信息(、address(包含地址详细信息(和customer_address(将客户映射到其地址(。在customer_address中,我有一个字段is_default,它允许将地址指定为一个客户的默认地址(使用is_default=1(。

是否可以编写一个存储过程来返回给定客户的默认地址?

假设将数据库设计保留为customer_address表中的is_default字段,则返回默认地址的查询可能如下所示。将此查询转换为存储过程将是微不足道的(唯一需要的参数是您希望为其返回其解平台地址的客户的ID(:

SELECT a.*
FROM customer c
JOIN customer_address ca ON ca.customer_id = c.id
JOIN address a ON a.id = ca.address_id
WHERE ca.is_default = 1;

如果您更改数据库设计以将默认地址ID存储在customer记录中(也许它应该在哪里(,那么查询就会简化:

SELECT a.*
FROM customer c
JOIN address a ON a.id = c.default_address_id;

当然,在客户记录中存储默认地址可能会使应用程序的其他方面更加困难,例如向客户添加地址或从客户删除地址。

最新更新