【问题标题】:80 rows of data , first select 1-20 rows , second select 21-30 rows80行数据,第一次选择1-20行,第二次选择21-30行
【发布时间】:2013-03-16 08:41:46
【问题描述】:

我有一个表,其中包含带有时间戳的行。

通常,如果我想根据时间获取最新的 20 行。我用:

$sql = "SELECT * 
    FROM comment 
    ORDER BY time DESC 
    LIMIT 20";

但是现在,我想在最新的 20 行和 LIMIT 到 10 之后获取最新的 cmets。这意味着第 21-30 行。(当然,一切都根据时间戳)

如何使用 MySQL 做到这一点?

【问题讨论】:

    标签: php mysql select


    【解决方案1】:

    MySQL 有一个内置的偏移量,可以与 LIMIT 一起使用:

    $sql = "SELECT * FROM comment ORDER BY time DESC LIMIT 10, 20";
    

    另外,请参阅此 SO 帖子:MySQL LIMIT/OFFSET: get all records except the first X

    【讨论】:

      【解决方案2】:
      $sql = "SELECT * FROM comment ORDER BY time DESC LIMIT 20, 10";
      

      【讨论】:

      • 这与 gmartellino 的回答有何不同?
      【解决方案3】:

      希望它能从 21 到 30 条记录中选择

      sql = "SELECT * FROM comment ORDER BY ID DESC LIMIT 20, 10";
      

      【讨论】:

        【解决方案4】:

        尝试各种限制

        $sql = "select * from (SELECT * FROM comment ORDER BY time DESC LIMIT 30) as A order by time ASC limit 10";
        

        其他人发布的mysql内置偏移方法看起来更好。

        【讨论】:

          【解决方案5】:

          有两种选择:

          • 获取30行,用PHP将结果集拆分成20行一组 和一组 10 人。
          • 发送两个查询,一个针对 20 行,一个针对 10 行。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-09-29
            • 1970-01-01
            • 2013-01-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-30
            相关资源
            最近更新 更多