2016-08-05 178 views
0

我正在完成一个购买活动门票的系统,并且我需要能够检查是否仍有门票可用。如果满足条件,在MySQL中获取最新条目

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

结构与例如用于tbl_rel_order_status(tbl_order_id和tbl_status_order_id是FKS)

| 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是FKS)

| 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),这都意味着由于某种原因,票数可以是m ade可用于其他客户。

事情是这样的:我工作的一个查询检索具有作为最新状态的任何上述提到的门票数量。如果不是,查询应该跳到下一张票(这是我卡住的地方)。

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

可以使用这样的查询获取最新的状态:

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'); 
+0

错误代码:1242子查询返回多个1行 - 我我刚刚用小提琴编辑了这个问题,以防你想玩。 –

+0

@LeandroDimitrio。 。 。现在用限制1来尝试版本。 –

+0

完美工作。谢谢你,先生 :) –