-1

我在尝试订购我的结果集列表时遇到了一些困难。我试图创建分页。我有一张名为 Track 的表。我使用以下 sql 来检索分页使用的身份列表:

SELECT trackid FROM track ORDER BY filelength limit 10

结果:

1
2
3
4
5
6
7
8
9
10

然后,我执行以下语句:

SELECT * FROM track ORDER BY filelength ASC LIMIT 10

我收到以下信息:

250   Track 250    0
251   Track 251    0   
252   Track 252    0   
253   Track 253    0   
254   Track 254    0   
255   Track 255    0   
256   Track 256    0   
257   Track 257    0   
258   Track 258    0   
259   Track 259    0    

在第二个结果集中,我看到结果集给出了不同的轨道,我希望第一个结果集中的 id 相同,但它似乎从 250 开始。为什么会这样?

我在这个表中有大约 20000 行,所有列文件长度列都是 0。

我正在运行 Mysql 服务器 5.1.30 - 社区版

4

3 回答 3

3

你自己说的:

并且所有列文件长度列都是 0。

ORDER BY filelength噪音也是如此,将返回任意行。数据库引擎将以特定于实现的方式选择任何行,因为它们都具有同等资格并且没有指定特定的顺序。

关系数据库的表中不存在“自然顺序”之类的东西。你似乎在假设。

使用有意义的列以ORDER BY定义的顺序选择行。像:

SELECT trackid FROM track ORDER BY trackid LIMIT 10;

为达到这个:

我基本上想要一个只包含第二个查询的 id 的结果集(可选没有限制)

尝试:

SELECT trackid
FROM   track
WHERE  trackid BETWEEN 250 AND 259
ORDER  BY trackid;
于 2012-05-08T22:33:49.750 回答
0

你从两张不同的桌子上拉出来。playitem不是track

SELECT trackid FROM playitem ORDER BY filelength limit 10
SELECT * FROM track ORDER BY filelength ASC LIMIT 10
于 2012-05-08T22:30:47.973 回答
-1

Well if you are trying to use this for pagination. In SQL the LIMIT clause can take two arguments. With two arguments, the first argument specifies the offset of the first row to return, and the second specifies the maximum number of rows to return. The offset of the initial row is 0 (not 1)

For example, the first one would be:

LIMIT 0, 10

The next one would be:

LIMIT 10, 10

The next one would be:

LIMIT 20, 10

And so on...

于 2012-05-08T23:09:05.990 回答