Sign in
Register your plurk account for free »

Plurk

39 responses to this plurk (Jump to bottom)

  • 大澤木小鐵
    前置字串加上 time() 以及驗證碼...
  • Will 保哥
    客戶要求訂單編號是:YYYYMMDD + 當天的訂單數
  • 生魚片
    當天的訂單數為何會重覆啊?
  • Will 保哥
    可能是 MySQL 無法 lock 的問題 ( 我用很舊版的 MySQL )
  • 大澤木小鐵
    一般我們是先產生一個空訂單,結帳確認後才把狀態改為 y
  • 大澤木小鐵
    所以如果用過的訂單編號,就會捨棄掉
  • Will 保哥
    同時兩個人抓今天的資料,兩個人抓到都是「無訂單」,然後就兩筆一樣的訂單編號了
  • 大澤木小鐵
    但這樣就達成不了**訂單數**的需求了...
  • chenshichang
    jaceju: 會不會是訂單新建一筆後又刪一筆,所以就重覆了?
  • 大澤木小鐵
    我的作法是先在 DB 裡產生一筆訂單,結帳不成功就拋棄它
  • 大澤木小鐵
    這樣訂單編號就繼續累加...只是還是會有上面達成不了**訂單數**這個需求的問題...:-(
  • Will 保哥
    是可以繼續算下去
  • Will 保哥
    PHP 有沒有什麼穩當的 lock 機制可用?
  • 大澤木小鐵
    willh: 那可能就要說服客戶了,基本上我很少用訂單數,而是用流水號,現在則是用 time() ...
  • Will 保哥
    flock 基本上是個廢物,從來沒成功過
  • pct@webconf
    說服客戶訂單編號本身的邏輯 bug,比繞遠路解決先天 bug 可能好多了
  • Will 保哥
    pct: PHP 有沒有什麼穩當的 lock 機制可用?
  • 大澤木小鐵
    willh: 沒有...幾乎都是靠系統面來解決...(例如 InnoDB)
  • 大澤木小鐵
    flock 只能用來鎖檔案...似乎也沒辦法解決資料庫的問題...
  • Will 保哥
    我只要能解決同壹台伺服器,同一個時間點,只能有一人產生我的訂單編號,這問題就可以解
  • topcatˊ_>ˋ
    用個Table去記錄日期,順號兩個欄位,然後每個要取訂單就去取得後加1存回,效率不是很好...不過應該可以避免
  • 史萊姆流星
    經常會發生訂單編號重複的狀況,常見的有可能是下訂流程本身就設計不良,像是可以先取得最新的訂單編號,但是同時有多人取得,多人填寫,結果填寫要花時間(時間差)就會有問題
  • 史萊姆流星
    流程大致上應該為 1. 取得流水號 2. 填寫資料 3. 送出確認 4. 回應單號以及內容 5. User 只能確認或是捨棄 ... 這樣
  • 史萊姆流星
    步驟 1. 的是暫時而且絕對唯一的 (time 即使用到秒還是會重複, 要注意, 複合型的欄位不錯用但是速度不保證) 步驟 4. 的才是真正的 ... 不知道大家認為這樣如何?
  • 生魚片
    這東西交給Mysql Transaction會不會比較簡單跟安全?
  • 企鵝阿呆
    可以先用一個表作建立自動編號,新增到這個表取的自動編號後,再和日期結合寫到訂單表當作訂單編號
  • 企鵝阿呆
    只是該表每天要清除一次重新計算auto_increment
  • sotom
    寫入的時候先找看看有無重覆,有的話就隨機 sleep 幾毫秒,再 + 1 檢查寫入?
  • 哇哈哈
    取得最大號碼+1->寫入db->成功就keep流水號,不成功就再加1
  • 哇哈哈
    然後回圈做到成功為止
  • dino
    簡單一點, 用 flat file (yyyymmdd.txt) 和檔案 lock 的機制如何?

Please sign in or register to plurk response.

Ads