【问题标题】:How to SELECT TOP 5 and then the following 5?如何选择前 5 名,然后选择以下 5 名?
【发布时间】:2010-03-20 20:48:26
【问题描述】:

因为 cmets 总是有它,您可以选择显示前 5 个 cmets(我知道如何),如果超过 5 个,您可以单击一个链接,它将显示以下 5 个 cmets。问题是我不知道代码应该如何显示下一个 5。

更好地理解我在说什么 假设我有 10 个 cmets,我使用

SELECT * FROM news ORDER BY ID DESC 限制 5

这将显示前 5 个 cmets,例如 ID 为 10、9、8、7、6 的 cmets

但是如果我想要 ID 为 5,4,3,2,1 的 cmets 怎么办?

【问题讨论】:

    标签: sql select


    【解决方案1】:
    SELECT * FROM news ORDER BY ID DESC LIMIT 5, 5
    

    假设你使用 MySQL,LIMIT 支持两个参数,offset(可选)和row_count

    [LIMIT {[offset,] row_count | row_count OFFSET 偏移量}]

    使用OFFSET 的替代方法是为了与PostgreSQL 兼容。

    【讨论】:

      【解决方案2】:

      我假设你在谈论 MySQL,所以你的答案是:

      SELECT * FROM news ORDER BY ID DESC LIMIT 5 OFFSET 5
      

      【讨论】:

      • 对不起,我也忘了提到 MySQL。是的,感谢您的回复,我用谷歌搜索了偏移量(以前从未听说过),并且有点了解它是如何工作的。但是我应该如何使它首先显示 TOP 5 并且单击链接时显示以下 5 等等?我应该使用 get 函数并将值用于选择参数吗?
      【解决方案3】:

      一种与风味无关的方法是:

      SELECT TOP 5 *
        FROM table
       WHERE pk NOT IN (SELECT TOP (page * 5) pk
                          FROM table
                         ORDER BY pk)
       ORDER BY pk
      

      【讨论】:

        【解决方案4】:

        这是客户的事情。

        显示 5,隐藏其余的直到被点击。喜欢这个网站:没有回调来获取剩余的隐藏 cmets。

        【讨论】:

          【解决方案5】:

          如果您想显示前五个 cmets 以及所有文本(取自您对 Joscha 的评论),然后显示另外五个 cmets 但带有缩短的文本或只是标题,您不应该使用两个 SQL 查询,而应该这样做这在您的应用程序逻辑中。

          所以选择你所有的新闻条目:

          SELECT id, title, body, date FROM news ORDER BY id DESC LIMIT 10
          

          然后循环遍历你的结果。显示前五个与后五个不同。

          如果你想拥有类似 Paginator 的东西,你可以从第 0 页开始:

          $page = isset($_GET['page'] ? intval($_GET['page']) : 0;
          SELECT id, title, body, date FROM news ORDER BY id DESC LIMIT 5 OFFSET $page * 5 + 5;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-02-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-19
            • 1970-01-01
            • 2012-03-26
            相关资源
            最近更新 更多