iT邦幫忙

0

INSERT INTO SELECT 問題

如下: 套shop_cart的資料轉到history 現在有個問題 我history還有一個欄位(buy_date)要資料 請問我要怎麼改 是要再寫一個UPDATE嗎??

"INSERT INTO history
  (user_name,user_phone,part_id,order_number)
SELECT user_name,
       user_phone,
       part_id,
       order_number
  FROM shop_cart 
  WHERE user_name='$insert_new0'"

1 個回答

0
浩瀚星空
iT邦超人 1 級 ‧ 2020-06-29 09:40:01
最佳解答
"INSERT INTO history
  (user_name,user_phone,part_id,order_number,buy_date)
SELECT user_name,
       user_phone,
       part_id,
       order_number,
       buy_date
  FROM shop_cart 
  WHERE user_name='$insert_new0'"

希望你不要又突然馬後炮一輪。
光看你這樣存我就覺得一定還有事。

看更多先前的回應...收起先前的回應...
求關注 iT邦新手 5 級 ‧ 2020-06-29 09:50:18 檢舉

我的想法是 把購物車的內容轉到history上 再存一個時間 然後在回頭把購物車的資料刪了
請問這樣有甚麼問題嗎?

看程式碼 你的意思 先在shop_cart加入一個buy_date 在使用者按下結帳的時候update資料 再一起轉??

存時間沒問題。畢竟現在orm都有自訂的建立時間(created_at)跟更新時間(updated_at)

除非是你隨便命名,要不然依你說要加入的為buy_date。
會被理解為「購買時間」

正常要存 history 的情況下,不太可能將有效變數列入額外欄位內。
也就是說,你最大的問題再於你沒說清楚。

如果你只是要單純記錄「記錄時間」,大可利用 CURRENT_TIMESTAMP 的特性。不需要再從資料中傳送不必要的記錄參數。

你還是說清楚一下你的實際運行流程吧。
這樣子搞不是辦法。

如果是要記錄歷程的話。
有時你並不需要用來源檔來送的。

我發現你還是帶有點拿sql當程式開發在用。
以下的方式給你參考。

假資料帶入法

"INSERT INTO history
  (user_name,user_phone,part_id,order_number,buy_date)
SELECT user_name,
       user_phone,
       part_id,
       order_number,
       "2020-01-01" AS buy_date
  FROM shop_cart 
  WHERE user_name='$insert_new0'"

記錄時間應用法
將history多開一個如下的欄位

`historyTime` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()

然後你的資料就可以不需要再加
用你原來的

"INSERT INTO history
  (user_name,user_phone,part_id,order_number)
SELECT user_name,
       user_phone,
       part_id,
       order_number       
  FROM shop_cart 
  WHERE user_name='$insert_new0'"

當你儲存資料到history,它就會幫你將當下時間記錄了。

求關注 iT邦新手 5 級 ‧ 2020-06-29 10:57:19 檢舉

先感謝成功了 我使用(current_timestamp())

我的想法式這樣的
購物車(先寫入history 之後 在呼叫一個php 用他刪除之前的購物車內容) -> 購買紀錄

給你一個觀念。
資料盡量不要用delete。
如果運做上有其必要,就盡量採用temp或是程式變數緩存的方式。
有必要才寫入,盡量不要拿sql當緩存用。

sql的運做上,delete是最操效能且也危險的操作。
在規劃上,delete的動作,不要規劃到很頻繁的操作上。

以上是給你的建議。

求關注 iT邦新手 5 級 ‧ 2020-06-29 11:46:21 檢舉

好的 那我再想想 我要怎麼改

增加兩個欄位,例如叫做 狀態 , 一個狀態是還停在購物車,另一個是
確定購買,只要update 狀態欄位,以及確定購買的時間戳(另一個欄位).這樣也許是一個參考方向.

求關注 iT邦新手 5 級 ‧ 2020-06-29 14:29:32 檢舉

我一開始也是這樣做 我為了讓使用者不會重複購買
結帳前:
(例:小明加入10隻筆到購物車 後面再加入10筆 這個時候不會再新增新的一筆資料 而是舊的資料在加10) 以上是還沒結帳的時候

我的sql

INSERT INTO shop_cart (user_name,user_phone,part_id,order_number)
VALUES('$insert_new0','$insert_new1','$insert_new2','$insert_new3')
ON DUPLICATE KEY UPDATE order_number = order_number + '$insert_new3'

結帳後:
這邊我遇到一個問題 如何判斷物品的狀態 如我的資料表怎麼知道這一筆是還沒結帳的還是結帳的
遇到問題
(例:假入如之前那隻筆的狀態是Y了 但我還是會加在那一筆上 而不是新的一筆)

我要發表回答

立即登入回答