【问题标题】:how to select the 5 latest row from my mysql如何从我的 mysql 中选择最新的 5 行
【发布时间】:2011-03-15 03:29:58
【问题描述】:

我想知道从我的表中检索 5 个最新行的 sql 命令?下面是我的sql查询。我该怎么做,才能根据第 5 行选择 5 个最新的行 进行处理?

$query = 
"SELECT lat, lng, DATE_FORMAT(datetime,'%W %M %D, %Y %T') AS 
  datetime FROM markers1 WHERE 1";

【问题讨论】:

  • 你可能应该向我们展示表的架构,或者表中的关键列(lat、lng、datetime、主键中的任何列——你确实有一个主键,不要'你呢?)。
  • 试试 order bylimit 并知道它们是什么,使用谷歌。如果有人向您询问,您可能无法了解全部情况。这是作业吗?

标签: php mysql phpmyadmin


【解决方案1】:

您需要对结果进行排序,并设置一个限制。

假设 datetime 是您想要订购的时间:

$query = "
    SELECT 
        lat, 
        lng, 
        DATE_FORMAT(datetime,'%W %M %D, %Y %T') AS datetime 
    FROM markers1 WHERE 1
    ORDER BY datetime DESC
    LIMIT 5
";

编辑: 回答 OP 的评论:“我得到的结果是第 50 行的第一个查询的开始,然后是 49,48,47,46 我有可能从第 46,47,48,49,50 行开始吗?”

您可以使用 PHP 中的结果来执行此操作,方法是获取行并将它们存储在数组中并反转数组。 我不相信您可以有效地反向循环遍历 mysql 结果资源。

要在 SQL 查询中执行此操作,您需要使用原始查询创建一个临时表:

$query = "
    SELECT 
        lat,
        lng,
        DATE_FORMAT(datetime,'%W %M %D, %Y %T') AS datetime 
    FROM (
        SELECT 
            lat, 
            lng, 
            datetime
        FROM markers1 WHERE 1
        ORDER BY datetime DESC
        LIMIT 5
    ) AS tmp_markers
    ORDER BY datetime ASC
";

初始查询的结果被用作在新查询中搜索的表,该查询按日期时间升序排列。我不得不在外部查询上应用 DATE_FORMAT,因为我们需要 datetime 字段再次排序。

【讨论】:

  • 尊敬的先生,谢谢您的指导。此代码正在运行。bt 我的情况有点不同。例如,我总共有 50 行,我得到的查询结果是第 50 行的第一个查询开始,然后是 49、48、47、46可能我可以从第 46、47、48、49、50 行开始?
【解决方案2】:

只需添加:

ORDER BY datetime DESC
LIMIT 5

【讨论】:

    【解决方案3】:

    最好的方法是添加一个行号,然后在此基础上反转您的查询,因为我们无法保证您的日期时间字段按时间顺序递增;我还假设最新的 5 行是指添加到表中的最后 5 行,而不是日期时间最近的 5 行。

    SELECT
        lat
        , lng
        , DATE_FORMAT(datetime,'%W %M %D, %Y %T') AS datetime
        , @rownum:=@rownum+1 `RowNum`
    FROM
        markers1
        , (SELECT @rownum:=0) `r`
    WHERE 1
    ORDER BY RowNum DESC
    LIMIT 5
    

    查看这个家伙的blog,了解我使用的行号解决方案。

    【讨论】:

    • 尊敬的先生,谢谢您的指导。此代码正在运行。bt 我的情况有点不同。例如,我总共有 50 行,我得到的查询结果是第 50 行的第一个查询开始,然后是 49、48、47、46可能我可以从第 46、47、48、49、50 行开始?
    【解决方案4】:

    可能是一个很晚的答案,但这很好也很简单。

    select * from table_name order id desc limit 5
    

    此查询将返回您在表中插入的一组最后 5 个值(最后 5 行)

    【讨论】:

      【解决方案5】:

      查看我对最后 5 个条目的查询

      SELECT * FROM notices where organizationid = $orgid ORDER BY `notices`.`id` DESC LIMIT 5
      

      所以,最重要的是ORDER BY notices.id DESC LIMIT 5

      【讨论】:

        猜你喜欢
        • 2020-07-19
        • 2011-11-17
        • 1970-01-01
        • 2022-12-03
        • 2020-06-27
        • 2018-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多