【问题标题】:how to retrieve all rows from a table starting from the n'th row如何从第 n 行开始从表中检索所有行
【发布时间】:2015-08-23 17:04:36
【问题描述】:

我想从第 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 之前和检索元素之后将这两个数组组合在一起。

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

有没有更好的方法来做到这一点?

【问题讨论】:

  • 所以你希望它是特殊顺序的所有结果?
  • 为什么不选择所有行,读取前 n 行,然后读取到最后?
  • 您是否尝试过使用orderBy DESC
  • @Ahmad 真是个好主意:D,我认为这将是最好的答案!
  • @Yazan,这可能有点晚了,但看看我更新的答案,一个查询选择全部,php 用krsort 来反转排序顺序和array_chunk 做剩下的事情其余的。

标签: php mysqli


【解决方案1】:

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

【讨论】:

  • 我认为这是减少查询时间和执行的最佳方式!就像我需要的一样。
【解决方案2】:

你也可以试试这个:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      只需按任意列颠倒顺序并传递偏移量和限制

      $data = SELECT * FROM  table;
      

      在php中

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

      【讨论】:

        猜你喜欢
        • 2016-09-10
        • 1970-01-01
        • 2010-10-19
        • 2013-07-29
        • 1970-01-01
        • 1970-01-01
        • 2015-09-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多