2014-01-16 94 views
0

他是一个棘手的查询,我似乎无法弄清楚,除非我使用PHP - 我不想花费任何代价。所以这里是我正在试图做的...MySQL:选择最后X行,然后选择特定行

我有一个名为invoices的表。该表有一个名为paid的字段。在发票被认为已付款后,该栏位会打勾。现在,我有一个名为Latest Invoices的页面,显示了前100个发票的巨大列表(付款&未付)。

SELECT * FROM invoices ORDER BY id DESC, id LIMIT 100 

显然很好。但是,我想通过添加一个条件来调整此声明,该条件还将包括在最后100张发票之后支付不是的任何发票。

所以,换句话说:
- 第100张发票会显示支付/ UNPAID
- 然后任何未付的款项将在后面(没有限制)

干杯

回答

3

您需要确定前100个发票。这里是这样做,通过使用join的方式:

SELECT i.* 
FROM invoices i left outer join 
    (select i.* 
     from invoices i 
     order by id desc 
     limit 100 
    ) i100 
    on i.id = i100.id 
WHERE i100.id is not null or i.paid = 0 
ORDER BY id desc; 

order by只是使用id。这将使前100名位于顶端。其余的未付款将遵循逆id订单。

+0

完美工作。我喜欢你在这里做的... – user0000001