PHPIN.NET

 找回密码
 立即注册
查看: 5803|回复: 0

[MYSQL] 商品的无限规格实现

[复制链接]

469

主题

31

回帖

5507

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5507
发表于 2016-6-21 16:22:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
商品的无限规格实现

在电子商城项目开发中, 会存在同一种商品存在不同规格的情况, 如图某型号手机在售卖时用户可以选择的不同规格:

14205736.png

这里商品的库存量单位(SKU)便不再是该商品, 而是到具体属性组合出的规格, 每种规格可能会有不同的售价、运费与库存剩余情况, 所以用户在购买时,

不仅需要记录所购买的商品 ID, 同时也需要记录购买的该商品的具体规格。

直观分析图示中的规格情况, 网络类型机身颜色机身内存 属于商品不同属性的名称, 与之对应的为属性可选择的的具体值, 属于一对多关系, 在

MySQL 数据库表结构中反应出为:
  1. # 商品属性名
  2. CREATE TABLE `item_attr_key` (
  3.     `attr_key_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,     # 主键, 自增 ID
  4.     `item_id` INT(10) UNSIGNED NOT NULL,                        # 关联到商品
  5.     `attr_name` VARCHAR(50) NOT NULL,                           # 属性名称
  6.     PRIMARY KEY (`attr_key_id`)
  7. );

  8. # 商品属性值
  9. CREATE TABLE `item_attr_val` (
  10.     `attr_key_id` INT(10) UNSIGNED NULL DEFAULT NULL,       # 对应 item_attr_key 表的 attr_key_id, 完成一对多关联
  11.     `item_id` INT(10) UNSIGNED NULL DEFAULT NULL,           # 关联到商品
  12.     `symbol` INT(10) NULL DEFAULT NULL,                     # 属性编码
  13.     `attr_value` VARCHAR(255) NULL DEFAULT NULL             # 属性值
  14. );
复制代码

加入数据后表内容如图:

14205737.png

symbol 字段是对指定商品 ID 下的属性值的一个序号标记, 是为了提高在后面使用到时的检索效率。该值在不同商品间可以重复, 在同一商品的属性中需

要保证唯一。

以上就完成了商品 ID 为 6 的商品多属性的存储工作。



为了能够记录和快速查询出每种属性组合出的商品的价格、库存等信息, 我们还需要张表来维护这部分数据, 建立 item_sku 表:

  1. # 商品库存量单位表
  2. CREATE TABLE `item_sku` (
  3.     `sku_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,                      # 主键, 自增 ID
  4.     `item_id` INT(10) UNSIGNED NOT NULL DEFAULT '0',                        # 关联到商品
  5.     `attr_symbol_path` VARCHAR(255) NOT NULL,                               # 属性组合出的规格路径
  6.     `price` DOUBLE(15,2) NOT NULL DEFAULT '0.00',                           # 价格
  7.     `freight` DOUBLE(15,2) NULL DEFAULT '0.00',                             # 运费
  8.     `stock` INT(10) UNSIGNED NOT NULL DEFAULT '0',                          # 库存数量
  9.     PRIMARY KEY (`sku_id`)
  10. );
复制代码

该表是用户在添加完商品属性后, 由系统负责生成的该商品所有的可以选择的属性组合方案, attr_symbol_path 字段即是该商品不同属性值的 symbol

字段组合后的路径, 用来指示该规格具体指代哪些属性。

attr_symbol_path 字段值为 1,4,7, 则对应 item_attr_val 表中 item_sku.item_id = item_attr_val.item_id 条件下 symbol 字段值为 1, 4, 7

的属性组合: TD-LTE/FDD-LTE/TDS/WCDMA/EVDO/GSM - 深空灰 - 16GB

将示例中具有三种网络类型、三种机身颜色、三种机身内存的属性数据生成 SKU 后的 item_sku 表数据图示:

14205738.png

从图中数据看出, 该商品共有27种不同规格可选, 那么这时在确定用户选择的某种规格的价格等信息时只需一条 SQL 语句即可完成:

  1. select * from `item_sku` where `item_id`=6 and `attr_symbol_path`='1,4,7';
复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|PHPIN.NET ( 冀ICP备12000898号-14 )|网站地图

GMT+8, 2024-4-19 14:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表