iT邦幫忙

0

如何將一些數據筆包裝成一個搜集,點開後再根據該ID展開?

情境:每天都會產生不確定的訂單數量
假設今天產生有八筆訂單

id / status

1 / 處理中
2 / 處理中
3 / 處理中
4 / 處理中
5 / 處理中
6 / 處理中
7 / 處理中
8 / 處理中

我利用迴圈將這八筆訂單的狀態一次改為「出貨中」

問題:
我要如何將這八筆變成是一個搜集?(收納)
假設變為出貨中時,我可以給這八筆一個 ID
然後掛上一個日期假設 2018-11-11 16:40:00(我在這個時間點將這八個訂單變為出貨中)
並賦予一個ID

假設昨天有六筆

id / status

11 / 處理中
12 / 處理中
13 / 處理中
14 / 處理中
15 / 處理中
16 / 處理中

我一樣將狀態改為出貨中後
也會產生獨立ID,並加上日期例如 2018-11-10 11:32:00

所以另一頁會有一個列表會顯示

2018-11-11 16:40:00
2018-11-10 11:32:00
當我點進去 11-11 這筆時,可以看到那八筆訂單(關聯性數據)
當我點進去 11-10 這筆時,可以看到昨天那六筆
這能怎麼實現呢?怎麼把當次的操作收納起來?賦予ID並顯示?

看更多先前的討論...收起先前的討論...
Homura iT邦研究生 3 級 ‧ 2018-11-05 13:36:43 檢舉
看不懂....
浩瀚星空 iT邦研究生 4 級 ‧ 2018-11-05 13:42:34 檢舉
這其實已經不是程式設計的理念了。而是架構規劃了。

基本上來說,倒是很少看到有這樣子的需求。不過要做到也不是不行。

這需要看你哪一種方式比較適合。

一種是出貨中你需要另一個表來記錄。其對應的值一般有兩種方式記錄。
一種是在出貨主表中記錄。
另一種是在子表訂單額外一個欄位記錄其對應的id。
基本上這得看你要的應用性質而定,兩個方式沒有所謂的好與壞。

不過因為你說明的情境真的很難讓人理解。我只能就程式面跟操作實務應用面中,大約給你說明。
在程式規劃中,怎麼做都無所謂。但這不是別人有辦法教你的。
因為不明白你真實的情況。並無法給你很好正確的應用方式。
asys0512 iT邦研究生 5 級 ‧ 2018-11-05 14:39:38 檢舉
TO:浩瀚星空 了解,感謝
ant1017 iT邦新手 5 級 ‧ 2018-11-06 08:52:20 檢舉
關聯式資料庫..

1 個回答

1
ddtet
iT邦新手 5 級 ‧ 2018-11-05 14:38:36
最佳解答

記得曾經處理過類似的需求,由於不能肯定就是問題所要描述,所以先作點背景說明。

每個一段時間(自動觸發 or 人工)處理中間這段時間的訂單,
由於訂單處理的過程會取用人工輸入的設定,以及與另一台主機溝通記錄。
在人工可能會出錯,加上另一台主機並不會回傳每筆要求成功與否。

因此需要為了訂單的處理加上 批號 ,當事後發現某筆訂單處理出錯,
就可以快速抓出其它一起被處理的訂單進㣔檢查。

有個獨立的 批號 資料表,批號是主鍵、自動遞增,再加上處理時間…等其它描述資訊。
處理一批訂單前先産生一個批號,拿這個批號寫回訂單的相關資料中。

如此拉取訂單資料的同時,也可以藉由相同的批號 JOIN 出其它同批號的訂單。

至於批號是放在訂單表中,還是獨立一張表格。
如上面的討論,這已經是資料結構規劃的問題,得由處理的人視條件、限制去設計。
這裡只是把當時的一些思路在這裡提出來以供參考。

看更多先前的回應...收起先前的回應...
asys0512 iT邦研究生 5 級 ‧ 2018-11-05 14:41:08 檢舉

只是我這八筆都是獨立單號,我實在是想不到怎麼產生同一個批號,甚至自動一批一批遞增

ddtet iT邦新手 5 級 ‧ 2018-11-05 17:04:07 檢舉

我的解法文中都有啊~~ 所謂的「想不到」指的是什麼?
可能要把問題細分,講清楚一點,讓其它人有辦法「精準」回應…
不然也只能給大約的答案…

我試著講詳細一點好了…

  1. 批號是另一個資料表自動遞增的主鍵
  2. 在處理整批資料前,先産生新的批號

假設批號資料表(batch_no)是…

id timestamp handler
編號 時間 處理者

你文中提到是一次用迴圈把多筆資料一次改為「處理中」。
表示應該可以在迴圈前先對 批號 資料表加一筆資料。
例如: INSERT INTO batch_no VALUES ( NULL, NOW(), 'ddtet')

接著就可以執行 SELECT LAST_INSERT_ID() 取得剛剛自動産生的 ID ,接下來就是不同程式流程規劃的事情了…

asys0512 iT邦研究生 5 級 ‧ 2018-11-06 12:15:35 檢舉

你是說做迴圈之前先 INSERT INTO 一筆數據,先取得自動產生的ID
再拿這個ID去做迴圈,給該次迴圈的每一個訂單加上這個ID?

ddtet iT邦新手 5 級 ‧ 2018-11-07 15:46:17 檢舉

是啊~ 這樣既有批號記錄,也利用資料庫給予批號唯一性的保證。

我要發表回答

立即登入回答