MYSQL select last rows,order by ASC

问题描述:

我只想在帖子中选择最新的3条评论,并按ASC顺序排列。MYSQL select last rows,order by ASC

这将选择最后3行,但我需要他们以相反的顺序:

mysql_query(" 
SELECT * FROM comments WHERE postID='$id' AND state='0' ORDER BY id DESC LIMIT 3") 

您可以在以后排序扭转它。

SELECT * 
FROM (SELECT * FROM comments 
     WHERE postID='$id' 
     AND state='0' 
     ORDER BY id DESC 
     LIMIT 3) t 
ORDER BY id ASC; 
+0

非常感谢。 – 2012-01-17 07:35:27

+1

不建议您使用*,提及所有项目的速度会更快 – Porizm 2013-05-28 16:46:57

这也可以做到了在PHP中,无需修改SQL查询,只需在结果集向后迭代:

$res = mysql_query(...); 
for($i=mysql_num_rows($res)-1; $i>=0; $i--) { 
    //do whatever 
} 

我承认我不知道的性能差异是什么(如果有的话),但这只是另一个可能适合你的选项。

+0

我更喜欢这种方法,我认为它将选择三个最新的输出和输出最早的输出的想法分开(在我的脑海里至少:p) – 2012-01-17 07:43:15

+1

那么它总是最好的尽可能在服务器上完成尽可能多的工作(在数据库中),并且不让用户端必须这样做(使用php),但我非常感谢您的答复。 – 2012-01-17 07:44:52

+0

我认为这真的归结为一个偏好问题。我通常喜欢尽可能在SQL中做更多的事情,但有时它可能会混淆代码,而PHP更具可读性和可理解性,恕我直言,所以有时向后迭代只会使代码更加清晰。 – cegfault 2012-01-17 07:50:44

$result = mysqli_query($con,"SELECT * FROM (SELECT * FROM messeges WHERE username='{$_SESSION['username']}' ORDER BY id DESC LIMIT 3) t ORDER BY id ASC"); 
+1

仅有代码的答案对教育SO读者没有太大帮助。请编辑您的答案以包含一些解释。您的答案位于审核队列中,因为它已被标记为低质量。 (...并请格式化您的代码) – mickmackusa 2017-04-19 12:35:46