2012-05-14 63 views
0
  1. 我有一些網站,當用戶點擊「訂單」,他的訂單我保存到訂單表。
  2. 訂單表有3個字段:id,user_id,book_id

我需要一些腳本來監視訂單表中的更改 - 如果出現某些訂單,它將讀取它們,執行並從訂單表中刪除。監控mysql表的訂單和存儲訂單歷史

我該如何有效地做到這一點?我以前從未做過這樣的事情 - 我想過一些將在一定時間間隔內執行的PHP腳本(10-15秒 - 它必須快)並讀取訂單表。但後來我認爲我必須保留訂單歷史記錄 - 還有第二個問題 - 我應該爲訂單歷史記錄創建第二個表還是隻添加字段「完成」到訂單表?我一次問這兩個問題,因爲它們是相互關聯的 - 也許當我的訂單表中包含完成的訂單時,我的腳本查詢它將是不夠高效的。我正在尋找最佳解決方案。

我使用MySQL 5.0 DATABSE ...

----------編輯

我不能使用觸發器 - 我必須執行一些PHP腳本來處理訂單時,他們出現在訂單表中!

+0

觸發器是你的朋友。 http://dev.mysql.com/doc/refman/5.0/en/triggers.html – 2012-05-14 22:37:14

+0

你沒有權限在數據庫中創建觸發器嗎?至少您需要更新權限才能將訂單標記爲已處理。 – kirbs

+0

男人 - 讀! - 我必須執行一些PHP代碼 - 我不能在觸發器中執行此操作 - 或者我錯了? – user606521

回答

2

您需要一個觸發器。像這樣的東西會奏效。

create trigger newOrderTrigger after insert on order_table for each row 
//you order execution code goes here 

請參閱MySQL Trigger documentation。 我也發現這個tutorial有幫助。

至於你的第二個問題,這取決於你的要求。如果您需要完整的可審計歷史記錄,則應該將更改複製到新表中。如果您不這樣做,那麼添加一個order_status並將其值從打開改爲完成是不夠的。

+0

但我必須運行一些PHP腳本來處理訂單 - 並且我知道我無法從觸發器中執行它... – user606521

+0

php腳本是與其他程序還是隻與數據庫交互? – kirbs

+0

腳本使用純php來讀取訂單表和foreach它處理訂單 - 訂單處理使用一些php庫+ mysql查詢。這個腳本的目的是當用戶點擊「訂單」時它可以運行,但是它需要一些時間來處理訂單,所以我希望它可以通過一些外部腳本完成,它將處理所有未處理的訂單... – user606521