我完成了购买活动门票的系统,我需要能够检查是否还有门票。
我有一个表(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
使用该查询,我只能获得具有任何这些的查询,但不能获得最新(或最新)数据库条目。
任何线索?
答案 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');