如何在MYSQL / SQL中查询此表结构中的顺序结果?

时间:2014-06-23 02:12:18

标签: php mysql sql

我目前正在处理电子购物车项目,需要记录tranaaction

结构是这样的:

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

注意,例如我会在订单更新时存储状态时间。因此,订单应该有多个状态,结果应该包含最新状态 ,所以我需要获取max(create_date)。如何在这种情况下构建查询?

我已经考虑过了,但它不在一个查询中,我想知道有没有办法在一个查询中创建它?感谢

更新

我的尝试查询就像这样

  1. 按照order_id的顺序从create_date
  2. 中选择状态组中的order_id
  3. 在PHP中,对于每个order_id,从订单中选择*,其中order_id =该ID并加入成员表

1 个答案:

答案 0 :(得分: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