MYSQL从表中选择,获取最新/最后10行数据。

13

最好、最简单的方法是什么?我的查询目前是:

  SELECT * 
    FROM chat 
   WHERE (userID = $session AND toID = $friendID) 
      OR (userID = $friendID AND toID = $session) 
ORDER BY id 
   LIMIT 10

这显示了前10行,而不是最后10行。

编辑:我想要最后10行(是的,DESC可以做到这一点),但我希望它们以升序返回。


使用数据库上的 sort 选项。 - user631756
4个回答

29

要倒序排列(因此获取最后10个而不是前10个),请使用DESC而不是ASC

编辑

根据您的评论:

SELECT * FROM (
  SELECT * 
  FROM chat 
  WHERE (userID = $session AND toID = $friendID) 
    OR (userID = $friendID AND toID = $session)  
  ORDER BY id DESC
  LIMIT 10
) AS `table` ORDER by id ASC

1
我忘记在我的问题中包括了,我想要最后10行(是使用DESC),但按升序排列。 - Dylan Cross
我知道这是一篇旧帖子,但这正是我在寻找的。谢谢 :) - Jeremy Board

1
如果你想要最后10个,只需要将ASC改为DESC。
SELECT * 
FROM 
chat 
WHERE 
(userID=$session AND toID=$friendID) 
OR 
(userID=$friendID AND toID=$session) 
ORDER BY id 
DESC
LIMIT 10

哎呀,我忘记在我的问题中包含最后10个了(是的,可以使用DESC完成,但是按ASC顺序)。 - Dylan Cross

1

首先从表中选择最后10个,然后按升序重新排序。

SELECT * FROM (SELECT * FROM table ORDER BY id DESC LIMIT 10) sub ORDER BY id ASC

0
$con = mysqli_connect("localhost","my_user","my_password","my_db");
$limit = 10;                
$query = "SELECT * FROM  $table";
$resource = mysqli_query($con,$query);
$total_rows = mysqli_num_rows($resource);
$start = $total_rows-$limit;
$query_limit= $query." LIMIT $start,$limit";

首先我已经设置了限制

$limit = 10;

然后

 $total_rows = mysqli_num_rows($resource);

在这里,我已经获取了受影响的总行数。

$start = $total_rows-$limit;

然后从行数中减去限制,以获取起始记录编号

   $query_limit= $query." LIMIT $start,$limit";

然后将查询添加了限制。 有关限制的更多信息,请参见此链接 https://www.w3schools.com/php/php_mysql_select_limit.asp


1
仅有代码堆积而没有解释很少有帮助。请在您的答案中添加一些上下文。 - Chris
如果您有一个过滤器,这可能是个问题。一些数据可能会被忽略。 - Asuquo12
@Chris 这样可以吗...? 我在答案中添加了一点解释。 - mohitesachin217
1
@mohitesachin217,你已经添加了一些解释,但是在你的答案中使用了古老的mysql_*函数。如果你正在编写新代码,请**_不要使用mysql_*函数**。它们已经过时且存在问题,在PHP 5.5中被弃用(这么老的版本甚至不再接收安全更新),并在PHP 7中完全删除。请改用PDOmysqli_*,并使用_预处理语句_和_参数绑定_。有关详细信息,请参见https://dev59.com/3Gcs5IYBdhLWcg3wcDaZ。 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接