【问题标题】:Mysql - return last 3 results in tableMysql - 在表中返回最后 3 个结果
【发布时间】:2010-06-17 05:44:38
【问题描述】:

我想知道是否有一种简单的方法,只需一条 sql 语句即可返回表中的最后三个结果,但按该顺序,即如果有数百个结果,它将按 98、99、100 的顺序返回,而不是只需按 id DESC 和限制 3 排序,它将按 100、99、98 的顺序返回

非常感谢任何帮助。

附言在这种情况下,假设我不知道结果的数量,也不想发送 2 个 sql 请求只是为了找到数量(对于任何 OFFSET 答案)。

【问题讨论】:

    标签: mysql sql-order-by sql-limit


    【解决方案1】:

    一种方法是使用DESC,然后再次对它们进行排序:

    SELECT * FROM (SELECT * FROM some_table ORDER BY id DESC LIMIT 3) a ORDER BY id
    

    【讨论】:

    • getting err error 1 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“ORDER BY ID DESC LIMIT 3) AS T ORDER BY TIME_STAMP”附近使用正确的语法
    • 发布您的查询。另外,您不想在内部查询中ORDER BY TIME_STAMP DESC 吗?
    【解决方案2】:

    我猜有两个选择。

    1. 您可以使用 DESC 按您所说的相反顺序返回它们,然后在您的应用程序代码中再次反转顺序。这可能是最有效的,因为您可以在单个查询中执行此操作,并且可能只需要读取索引的三行。

    2. 可以先找出表中的结果个数,然后做一个LIMIT , 3

    【讨论】:

    • 后续:对于大表或复杂查询,第二个选项可能要慢得多。第一个更好。
    【解决方案3】:

    你把它翻回原来的顺序可以吗?

    SELECT * FROM (SELECT * FROM SOMETABLE ORDER BY ID DESC LIMIT 3) AS T ORDER BY ID;
    

    【讨论】:

      【解决方案4】:
      Select * 
      FROM (SELECT * FROM yourTABLE ORDER BY ID DESC LIMIT 0,3) as TempTable ORDER BY ID
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-08
        • 2018-06-05
        • 1970-01-01
        • 1970-01-01
        • 2016-12-09
        • 1970-01-01
        • 2020-05-06
        • 2016-06-27
        相关资源
        最近更新 更多