2012-01-17 58 views
5

我只想在帖子中選擇最新的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") 

回答

14

您可以在以後排序扭轉它。

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

2

這也可以做到了在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

-1
$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