MySQL:订单,限价,订单

时间:2013-12-09 11:31:59

标签: mysql sql

我尝试编写一个解决方案,其中有多个链接表。 现在我有另一个问题:

我想将返回的行数限制为1000。 但我想显示ID 1-1000,下一页1001-2000。 ID可以以不规则的顺序存储在数据库中(ID 1不必是第一行)

到目前为止没有任何问题:

SELECT * FROM table ORDER BY id ASC LIMIT 1000

BUT 现在我必须通过另一个列对结果进行排序:

SELECT * FROM table ORDER BY name ASC LIMIT 1000

可能返回除1-1000之外的其他ID 或者我

SELECT * FROM table ORDER BY id ASC, ORDER BY name ASC LIMIT 1000

但是这只会按名称排序。因此,如果我有任何ID重复(这是不可能的),我会按名称排序。

我怎样才能获得前1000个ID(某些ID可能不存在,因为它们之前可能已被删除!)以及按名称排序的千行?

这甚至可能吗?

1 个答案:

答案 0 :(得分:4)

试试这个:

SELECT * FROM table WHERE id IN (
   SELECT ID FROM table ORDER BY ID ASC LIMIT 0, 1000
) ORDER BY name ASC

如评论中所述,不支持子查询,'此版本的MySQL尚不支持'LIMIT& IN / ALL / ANY / SOME子查询'。使用JOIN是唯一的选择,如下所示:

SELECT table.* FROM tab JOIN (
   SELECT ID FROM table ORDER BY ID LIMIT 1000
) temp
ON table.ID = temp.ID
ORDER BY table.name