如果符合标准,请在MySQL中获取最新条目

时间:2016-08-05 21:36:24

标签: mysql

我完成了购买活动门票的系统,我需要能够检查是否还有门票。

我有一个表(tbl_rel_order_status),它在订单和从支付网关(例如PayPal)收到的新状态之间建立关系。每个新事务都会生成一个新条目。

tbl_rel_order_status 的结构和示例(tbl_order_id和tbl_status_order_id是FK)

| id | tbl_order_id | tbl_status_order_id | datetime            |
| 1  | 1            |         1           | 2016-08-01 18:20:00 |
| 2  | 1            |         3           | 2016-08-01 18:20:00 |

tbl_order 的结构和示例(tbl_ticket_id,tbl_client_id和tbl_payment_method_id是FK)

| id | tbl_ticket_id | tbl_client_id | tbl_payment_method_id | qnty |
| 1  | 1             |         1     | 1                     |  40  |
| 2  | 1             |         2     | 1                     |  3   |

我有一些"取消状态" (即:6,7,8,11,13,15),这些都意味着由于某种原因可以为其他客户再次提供门票数量。

以下是:我正在处理查询以检索上述任何一种具有最新状态的票证数量。如果没有,查询应该跳到下一张票(那就是我被困的地方)。

SELECT tbl_order.qnty
FROM (SELECT tbl_order_id,tbl_status_order_id
      FROM tbl_rel_order_status
      WHERE tbl_status_order_id IN ('6','7','8','11','13','15')
      ORDER BY id DESC) inside
INNER JOIN tbl_order on tbl_order.id = inside.tbl_order_id
GROUP BY tbl_status_order_id

使用该查询,我只能获得具有任何这些的查询,但不能获得最新(或最新)数据库条目。

SQL Fiddle

任何线索?

1 个答案:

答案 0 :(得分:1)

您可以使用以下查询获取最新状态:

select o.*,
       (select ros.tbl_status_order_id
        from tbl_rel_order_status ros
        where ros.tbl_order_id = o.id
        order by ros.datetime desc
        limit 1
       ) as last_status
from tbl_order o;

据此,我想你想要:

select o.*,
       (select ros.tbl_status_order_id
        from tbl_rel_order_status ros
        where ros.tbl_order_id = o.id
        order by ros.datetime desc
        limit 1
       ) as last_status
from tbl_order o
having last_status in ('6', '7', '8', '11', '13', '15');