2014-01-16 126 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