mysql 商品規格表_商品規格分析

產品表每次更新商品都會變動的,ID不能用,可是購物車還是用了,這就導致每次保存商品,哪怕什么都沒有改動,也會導致用戶的購物車失效。

~~~

其實可以考慮不是每次更新商品就除所有的SKU,畢竟有時什么都沒修改呢,只改一個價格呢,或者增加一個SKU呢,其實這個問題做細一點有好的處理方式的。

比如商品增加一個版本號字段,SKU也增加一個版本字段,如果SKU規格值變動了那么刪除,如果發現規格值還在,只是價格或其它的改變了,那么則只需要改變版本號就可以了,但其實這里面的細節很多,考慮得比較麻煩,還是干脆不要用SKU的ID了,如果能不用SKU的ID,那就全部都不要用,購物車里面也只記錄商品的ID和規格字符串就可以了,根據規格字符串查詢SKU,如果找不到那就是沒有。

~~~

規格不是屬于模型,而是模型有個字段可以包含多個規格。多個規格值使用json編碼保存。

屬性是屬于模型的。多個屬性值使用逗號分隔。

商品展示時規格怎么獲取,跟后臺可不一樣,后臺是可以看到模型下面的所有規格,但不一地你給選用該規格,而前臺是要展現所有SKU,請注意這個區別。

iwebshop是將商品的所有規格組(SKU)都放入了goods表,顯示時使用了這兒的數據。而tpshop是從sku表中獲取的。

classes/goods_class.php 119 line

~~~

//是否存在貨品

$goodsUpdateData['spec_array'] = '';

if(isset($postData['_spec_array']))

{

//生成goods中的spec_array字段數據

$goods_spec_array = array();

foreach($postData['_spec_array'] as $key => $val)

{

foreach($val as $v)

{

$tempSpec = JSON::decode($v);

if(!isset($goods_spec_array[$tempSpec['id']]))

{

$goods_spec_array[$tempSpec['id']] = array('id' => $tempSpec['id'],'name' => $tempSpec['name'],'type' => $tempSpec['type'],'value' => array());

}

$goods_spec_array[$tempSpec['id']]['value'][] = $tempSpec['value'];

}

}

foreach($goods_spec_array as $key => $val)

{

$val['value'] = array_unique($val['value']);

$goods_spec_array[$key]['value'] = join(',',$val['value']);

}

$goodsUpdateData['spec_array'] = JSON::encode($goods_spec_array);

}

~~~

products.html 模板

~~~

{if:$spec_array}

{set:$specArray = JSON::decode($spec_array);}

{foreach:items=$specArray}

{$item['name']}
{set:$specVal=explode(',',trim($item['value'],','))}

{foreach:items=$specVal item=$spec_value}

{if:$item['type'] == 1}

  • {$spec_value}

{else:}

%7Bwebroot:%24spec_value%7D

{/if}

{/foreach}

{/foreach}

{/if}

~~~

* * * * *

### 擴展討論:標類與非標

當商品比較容易標準化,規范化時使用類型來決定規格這種形式比較好(根據商品類型定義規格模型),但是有一些場景這樣就不太靈活了,比如當商品很難標準化,規范化時,比如外賣的餐品,不是每一個餐品都有規格,都有辣度規格,大份小份等規格,所以此時應該尋找另外一種解決方案了,比如使用自定義的規格,這樣就靈活很多了,這里就有個很好的實例:[這是商品不依賴類型,自定義規格的完美解決方案!](https://coding.net/u/xiasf/p/gcb/git/commit/6d4116b91cc05e4db483e9eb49bd58611510f0e5#commit-comment-91257) ,當然如果情況復雜特殊,使用兩種方式結合也是我們愿意看到的,不過設計起來可能比較復雜,以后有實際案例再討論。

* * * * *

update:2017-3-16 11:18:03

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532377.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532377.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532377.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql維表的代理鍵字段_mysql多維數據倉庫指南--第三篇第12章(2)

賓夕法尼亞州地區客戶維在本節我將用賓夕法尼亞州地區客戶的子集維度來解釋第二種維度子集的類型。我也將向你說明如何測試該子集維度。相對的,一個向上鉆取的維包含了它基礎維的所有更高級別的數據。而一個特定子集維度則選擇了它基礎維的某個特定的數據集合。列表…

huggingface NLP工具包教程1:Transformers模型

huggingface NLP工具包教程1:Transformers模型 原文:TRANSFORMER MODELS 本課程會通過 Hugging Face 生態系統中的一些工具包,包括 Transformers, Datasets, Tokenizers, Accelerate 和 Hugging Face Hub。…

mysql日期比較timestamp_Mysql中的Datetime和Timestamp比較(轉載)

mysql中用于表示時間的三種類型date, datetime, timestamp (如果算上int的話,四種) 比較容易混淆,下面就比較一下這三種類型的異同相同點都可以用于表示時間都呈字符串顯示不同點1.顧名思義,date只表示YYYY-MM-DD形式的日期,datet…

隱馬爾可夫模型HMM推導

隱馬爾可夫模型HMM推導 機器學習-白板推導系列(十四)-隱馬爾可夫模型HMM(Hidden Markov Model) 課程筆記 背景介紹 介紹一下頻率派和貝葉斯派兩大流派發展出的建模方式。 頻率派 頻率派逐漸發展成了統計機器學習,該流派通常將任務建模為一…

ef mysql 的坑_C# EF 與 MySql 的那些坑

之前一直想用 mysql 和 ef 。然后多次嘗試也只能感嘆 還是 sqlsever 是親兒子。今天在單位又嘗試了一次,然后就成功了,記錄一下遇到的問題。首先是安裝包和驅動?。請保證 MySql.Data / MySql.Data.Entity.EF6 / mysql Connector/NET 版本對應…

使用randomaccessfile類將一個文本文件中的內容逆序輸出_Java 中比較常用的知識點:I/O 總結...

Java中I/O操作主要是指使用Java進行輸入,輸出操作. Java所有的I/O機制都是基于數據流進行輸入輸出,這些數據流表示了字符或者字節數據的流動序列。數據流是一串連續不斷的數據的集合,就象水管里的水流,在水管的一端一點一點地供水…

huggingface NLP工具包教程2:使用Transformers

huggingface NLP工具包教程2:使用Transformers 引言 Transformer 模型通常非常大,由于有數百萬到數百億個參數,訓練和部署這些模型是一項復雜的任務。此外,由于幾乎每天都有新模型發布,而且每個模型都有自己的實現&a…

huggingface NLP工具包教程3:微調預訓練模型

huggingface NLP工具包教程3:微調預訓練模型 引言 在上一章我們已經介紹了如何使用 tokenizer 以及如何使用預訓練的模型來進行預測。本章將介紹如何在自己的數據集上微調一個預訓練的模型。在本章,你將學到: 如何從 Hub 準備大型數據集如…

mysql精講_Mysql 索引精講

開門見山,直接上圖,下面的思維導圖即是現在要講的內容,可以先有個印象~常見索引類型(實現層面)索引種類(應用層面)聚簇索引與非聚簇索引覆蓋索引最佳索引使用策略1.常見索引類型(實現層面)首先不談Mysql怎么實現索引的,先馬后炮一…

pytorch lightning最簡上手

pytorch lightning最簡上手 pytorch lightning 是對原生 pytorch 的通用模型開發過程進行封裝的一個工具庫。本文不會介紹它的高級功能,而是通過幾個最簡單的例子來幫助讀者快速理解、上手基本的使用方式。在掌握基礎 API 和使用方式之后,讀者可自行到 …

RT-Smart 官方 ARM 32 平臺 musl gcc 工具鏈下載

前言 RT-Smart 的開發離不開 musl gcc 工具鏈,用于編譯 RT-Smart 內核與用戶態應用程序 RT-Smart musl gcc 工具鏈代碼當前未開源,但可以下載到 RT-Thread 官方編譯好的最新的 musl gcc 工具鏈 ARM 32位 平臺 比如 RT-Smart 最好用的 ARM32 位 qemu 平…

java list翻轉_JAVA實現兩種方法反轉單列表

/***authorluochengcheng* 定義一個單鏈表*/classNode {//變量private intrecord;//指向下一個對象privateNode nextNode;public Node(intrecord) {super();this.record record;}public intgetRecord() {returnrecord;}public void setRecord(intrecord) {this.record record;}…

OpenAI Whisper論文筆記

OpenAI Whisper論文筆記 OpenAI 收集了 68 萬小時的有標簽的語音數據,通過多任務、多語言的方式訓練了一個 seq2seq (語音到文本)的 Transformer 模型,自動語音識別(ASR)能力達到商用水準。本文為李沐老師…

mysql 工具 08s01_Mysql管理必備工具Maatkit詳解之十四(mk-kill)

mk-kill - 顧名思義,殺mysql線程。安裝方法查看這里。在一個OLTP的生產環境,一般不會讓sql執行過長的時間,特別是myisam這樣表鎖的引擎,如果出現長時間執行的sql一般是誤操作,要不就是出現問題了。出現這種情況&#x…

【經典簡讀】知識蒸餾(Knowledge Distillation) 經典之作

【經典簡讀】知識蒸餾(Knowledge Distillation) 經典之作 轉自:【經典簡讀】知識蒸餾(Knowledge Distillation) 經典之作 作者:潘小小 知識蒸餾是一種模型壓縮方法,是一種基于“教師-學生網絡思想”的訓練方法,由于其簡單&#xf…

深度學習三大謎團:集成、知識蒸餾和自蒸餾

深度學習三大謎團:集成、知識蒸餾和自蒸餾 轉自:https://mp.weixin.qq.com/s/DdgjJ-j6jHHleGtq8DlNSA 原文(英):https://www.microsoft.com/en-us/research/blog/three-mysteries-in-deep-learning-ensemble-knowledge…

在墻上找垂直線_墻上如何快速找水平線

在裝修房子的時候,墻面的面積一般都很大,所以在施工的時候要找準水平線很重要,那么一般施工人員是如何在墻上快速找水平線的呢?今天小編就來告訴大家幾種找水平線的方法。一、如何快速找水平線1、用一根透明的軟管,長度…

百度地圖mysql打點_關于百度地圖連接MYSQL的問題,謝謝啦!

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓大家好,剛使用百度地圖API,請教大家一個問題,謝啦!我需要從我的數據庫中取出字段為"city"的所有數據,然后通過bdGEO()函數在地圖上標注這些城市,我是…

PyTorch中的torch.nn.Parameter() 詳解

PyTorch中的torch.nn.Parameter() 詳解 今天來聊一下PyTorch中的torch.nn.Parameter()這個函數,筆者第一次見的時候也是大概能理解函數的用途,但是具體實現原理細節也是云里霧里,在參考了幾篇博文,做過幾個實驗之后算是清晰了&am…

Vision Transformer(ViT)PyTorch代碼全解析(附圖解)

Vision Transformer(ViT)PyTorch代碼全解析 最近CV領域的Vision Transformer將在NLP領域的Transormer結果借鑒過來,屠殺了各大CV榜單。本文將根據最原始的Vision Transformer論文,及其PyTorch實現,將整個ViT的代碼做一…