如何检索表中从第n'行开始的所有行


how to retrieve all rows from a table starting from the n'th row

我想检索从第n行开始的表中的所有行。

例如,如果表有20行和n=9,我想检索所有元素,其中检索到的元素的第一部分是从9到20的元素,第二部分是从1到8的元素。

[9,10,...,19,20,1,2,...,7,8] .

起初,我认为我可以使用2个查询来使用LIMITOFFSET

//retrieve the 2nd group
SELECT * FROM Tname WHERE 1 LIMIT (Tsize-n+1) OFFSET (n)
//retrieve the 1st group
SELECT * FROM Tname WHERE 1 LIMIT (n-1)

我在检索元素之前计算Tsize-n+1, nn-1,并在检索元素之后将两个数组合并。

但是我不认为这是最优的解决方案(我不想使用多个查询)。而计算表中元素的数量是消耗的)。

有更好的方法吗?

我有一个简单的想法。只需选择所有行,然后读取前n行,最后读取剩下的行直到末尾。只是!

你也可以试试这个:

(SELECT * FROM  Tname WHERE id >= n)
UNION (SELECT * FROM  Tname WHERE id < n)

您可以使用一个小技巧来做到这一点:

SELECT * FROM Tname ORDER BY id >= n DESC, id ASC

这样就得到了顺序为[9,10,...,19,20,1,2,...,7,8]的结果。

如果这不起作用(你不知道应该用什么id作为边界),你可以在PHP中重新排列结果:

$n = 9;
$resultsArray = array_merge(
    array_slice($resultsArray, $n), 
    array_slice($resultsArray, 0, $n)
);

按列倒序传递偏移量和限制

$data = SELECT * FROM  table;
在php中

krsort($data); 
$chunked_data = array_chunk($data,9);