2014-06-23 49 views
3

我目前的電子購物車項目並需要記錄tranasaction如何在MYSQL/SQL中查詢此表結構中的訂單結果?

的結構是這樣的:

order 
------ 
id 
order_id 
* member_id 

member 
------ 
id 
member_id 

status 
-------- 
id 
description 
* order_id 
create_date 

因此,狀態是存儲爲了改變現狀,例如當收到訂單時,我添加訂單,並添加描述的狀態100 < ==我定義並對其進行硬編碼。如果訂單交付,那麼我將再插入一個狀態200 < ==也是我定義的。

然後,問題是,如何查詢這樣的結果?

(Desc) create_date order_id member-id status_description 

e.g. 
     2014 06 13 05:00:00 #11111 #12345 order_receive 
     2014 06 13 03:00:00 #15555 #12222 order_deliver 

通知例如每當訂單更新時,我都會存儲狀態時間。所以應該有幾個狀態的訂單,結果應該包含最新狀態只有,所以我需要得到最大值(create_date)。如何在這種情況下構建查詢?

我曾考慮過它,但它不是在一個查詢中,我不知道有什麼方法可以在一個查詢中創建它嗎?由於

更新

我嘗試查詢就像是從狀態組這

  1. 選擇ORDER_ID通過ORDER_ID爲了通過CREATE_DATE
  2. 在PHP中,每個ORDER_ID,SELECT * FROM訂單,其中ORDER_ID =該ID並加入會員表
+0

請你在編寫查詢的企圖更新你的問題。 – Kermit

+0

謝謝!有一個upvote。 – Kermit

回答

2

試試這個:

SELECT src.max_date, 
     src.order_id, 
     src.member_id, 
     CASE 
      WHEN s1.description = 100 THEN 'order_receive' 
      WHEN s1.description = 200 THEN 'order_deliver' 
     END AS status_description FROM 
    (SELECT MAX(s.create_date) max_date, s.order_id , o.member_id 
    FROM status s 
    JOIN `order` o ON o.order_id = s.order_id 
    GROUP BY s.order_id, o.member_id) src 
JOIN status s1 ON s1.create_date = src.max_date; 

Demo

+0

謝謝,應該加入訂單o? – user782104

+1

重試此與演示:) – MinhD

+0

感謝,但它似乎描述不符合create_date? – user782104