如何从我的mysql中选择5个最新的行

时间:2011-03-15 03:29:58

标签: php mysql phpmyadmin

我想知道sql命令从我的表中检索5个最新行?下面是我的SQL查询。我该怎么做,以便它可以选择 5最新行基于行号进行处理?

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

5 个答案:

答案 0 :(得分:7)

您需要订购结果,并设置限制。

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

$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,因为我们需要再次按日期时间字段排序。

答案 1 :(得分:1)

只需添加:

ORDER BY datetime DESC
LIMIT 5

答案 2 :(得分:1)

执行此操作的最佳方法是添加行号,然后根据该行反转查询,因为我们无法保证您的日期时间字段按时间顺序递增;而且我还假设最新的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,了解我使用的rownumber解决方案。

答案 3 :(得分:0)

可能是一个非常晚的答案,但这很好而且简单。

select * from table_name order id desc limit 5

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

答案 4 :(得分:0)

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

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

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