我想知道sql命令从我的表中检索5个最新行?下面是我的SQL查询。我该怎么做,以便它可以选择 5最新行基于行号进行处理?
$query =
"SELECT lat, lng, DATE_FORMAT(datetime,'%W %M %D, %Y %T') AS
datetime FROM markers1 WHERE 1";
答案 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