2016-04-26 89 views
1

進行排序我有一個由ID,NAME,PRICE和DATE列組成的表。MySQL ORDER BY + LIMIT + OFFSET語句:如何將OFFSET捨棄,然後使用ORDER BY

我想寫一個pager風格的導航,因爲表中有很多條目,所以看着整個SELECT的輸出變得不舒服。

我已經寫了下面的要求:

SELECT id 
     , name 
     , price 
     , date 
    FROM mytable 
ORDER 
    BY name asc 
LIMIT 30 OFFSET _here's_my_offset_depending_on_the_current_position_ 

這工作正常,僅作爲例子。當我嘗試按價格排序時,似乎MYSQL首先使用ORDER BY對整個表進行排序,並且僅在它進行了偏移量排序後。

我該如何改變這種行爲,換句話說,我該如何做一個偏移量,並且只能通過我喜歡的whaterver對結果行進行排序?

+5

使用子查詢。 –

+1

排序在演示文稿上,而不是在sql中,如果你只想排序subresult。當然,傳呼機仍然按名稱順序排列,這會使結果有點奇怪。 – thst

+1

你能解釋一下你爲什麼要這樣做嗎?如果你想做一個分頁你的查詢是好的,如果你做你想做的事(你必須使用子查詢),你的結果將是非常不一致的在你的不同頁面... –

回答

2

它,如果你使用子查詢可以很容易:

SELECT * FROM (
    SELECT id, name, price, date FROM mytable LIMIT 30 OFFSET _offset_ 
) AS page ORDER BY page.name asc