2016-04-26 115 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