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

Php 如何从第n行开始检索表中的所有行,php,mysqli,Php,Mysqli,我想从第n行开始检索表中的所有行 例如,如果表有20行且n=9,我想检索所有元素,其中检索到的元素的第一部分是9到20之间的元素,第二部分是1到8之间的元素 [9,10,…,19,20,1,2,…,7,8] 起初,我认为我可以使用两个查询来使用LIMIT和OFFSET来实现这一点 其中,我在检索元素之前和之后计算Tsize-n+1、n和n-1,然后将这两个数组合并 但我不认为这是最佳解决方案,我不想使用多个查询。计算表中元素的数量非常耗时 有更好的方法吗?您可以使用小技巧: SELECT * F

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

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

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

起初,我认为我可以使用两个查询来使用LIMIT和OFFSET来实现这一点

其中,我在检索元素之前和之后计算Tsize-n+1、n和n-1,然后将这两个数组合并

但我不认为这是最佳解决方案,我不想使用多个查询。计算表中元素的数量非常耗时


有更好的方法吗?

您可以使用小技巧:

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)
);

您也可以尝试以下方法:

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

我有一个简单的想法。只需选择所有行,然后读取前n行,最后将其余行读取到底。就那样

只需按任意列的相反顺序,并通过偏移量和限制即可

$data = SELECT * FROM  table;
在php中

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

所以你希望所有结果都按特殊顺序排列?为什么不选择所有行,先读n行,然后读到最后?你试过使用orderBy DESC吗?@Ahmad多么好的主意:D,我认为这是最好的答案@Yazan,这可能有点晚了,但看看我更新的答案,一个查询选择全部,php用krsort做其余的,以反向排序顺序,array_chunk做其余的。我认为这是减少查询时间和执行的最好方法!就像我需要的那样。
krsort($data); 
$chunked_data = array_chunk($data,9);