我尝试编写一个解决方案,其中有多个链接表。 现在我有另一个问题:
我想将返回的行数限制为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可能不存在,因为它们之前可能已被删除!)以及按名称排序的千行?
这甚至可能吗?
答案 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