PHP 實現商品的無限規格實現思路

2021-08-07 18:06:51 字數 1916 閱讀 3339

在電子**專案開發中, 會存在同一種商品存在不同規格的情況, 如圖某型號手機在售賣時使用者可以選擇的不同規格:

這裡商品的庫存量單位(sku)便不再是該商品, 而是到具體屬性組合出的規格, 每種規格可能會有不同的售價、運費與庫存剩餘情況, 所以使用者在購買時, 不僅需要記錄所購買的商品 id, 同時也需要記錄購買的該商品的具體規格。

直觀分析圖示中的規格情況, 網路型別、機身顏色、機身記憶體 屬於商品不同屬性的名稱, 與之對應的為屬性可選擇的的具體值, 屬於一對多關係, 在 mysql 資料庫表結構中反應出為:

# 商品屬性名 create table `item_attr_key` ( `attr_key_id` int(10) unsigned not null auto_increment, # 主鍵, 自增 id `item_id` int(10) unsigned not null, # 關聯到商品 `attr_name` varchar(50) not null, # 屬性名稱 primary key (`attr_key_id`) ); # 商品屬性值 create table `item_attr_val` ( `attr_key_id` int(10) unsigned null default null, # 對應 item_attr_key 表的 attr_key_id, 完成一對多關聯 `item_id` int(10) unsigned null default null, # 關聯到商品 `symbol` int(10) null default null, # 屬性編碼 `attr_value` varchar(255) null default null # 屬性值 );

加入資料後表內容如圖:

symbol 欄位是對指定商品 id 下的屬性值的乙個序號標記, 是為了提高在後面使用到時的檢索效率。該值在不同商品間可以重複, 在同一商品的屬性中需要保證唯一。

以上就完成了商品 id 為 6 的商品多屬性的儲存工作。

為了能夠記錄和快速查詢出每種屬性組合出的商品的**、庫存等資訊, 我們還需要張表來維護這部分資料, 建立 item_sku 表:

# 商品庫存量單位表 create table `item_sku` ( `sku_id` int(10) unsigned not null auto_increment, # 主鍵, 自增 id `item_id` int(10) unsigned not null default '0', # 關聯到商品 `attr_symbol_path` varchar(255) not null, # 屬性組合出的規格路徑 `price` double(15,2) not null default '0.00', # ** `freight` double(15,2) null default '0.00', # 運費 `stock` int(10) unsigned not null default '0', # 庫存數量 primary key (`sku_id`) );

該表是使用者在新增完商品屬性後, 由系統負責生成的該商品所有的可以選擇的屬性組合方案, 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 表資料圖示:

從圖中資料看出, 該商品共有27種不同規格可選, 那麼這時在確定使用者選擇的某種規格的**等資訊時只需一條 sql 語句即可完成:

select * from `item_sku` where `item_id`=6 and `attr_symbol_path`='1,4,7';

淘淘商城實現商品規格模板列表展示的實現

在做淘淘 專案的時候,想實現展示商品規格模板列表的展示功能,因為是單錶查詢 資料庫中有專門的tb item param這個表 所以dao層可以使用逆向工程的 service層 1 寫介面中的方法。得到商品規格模板列表 eudategridresult getitemparamlist int pag...

商品規格管理的實現 淘淘商城(十二)

建立模板 根據規格模板生成表單 儲存商品規格引數 展示規格引數 儲存規格模板 響應引數 taotaoresult。service層 service public class itemparamserviceimpl implements itemparamservice return taotaor...

php實現無限分類

access public param pid 節點的id param array 返回該節點的所有後代節點 public function list cate pid 0 access private param arr array 要遍歷的陣列 param pid 節點的pid,預設為0,表示從...