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

时间:2015-08-23 17:04:36

标签: php mysqli

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

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

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

起初,我认为我可以使用LIMITOFFSET使用2个查询来执行此操作。

//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+1nn-1的位置,我将两个数组合并。

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

有更好的方法吗?

4 个答案:

答案 0 :(得分: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)
);

答案 1 :(得分:1)

你也可以试试这个:

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

答案 2 :(得分:1)

我有一个简单的想法。只需选择所有行,然后读取前n行,最后读取剩余的行到最后。就是这样!

答案 3 :(得分:0)

按任意列反转顺序并传递偏移和限制

$data = SELECT * FROM  table;

在php中

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