2012-01-17 10 views
5

私はちょうどポストに最新の3コメントを選択し、それらをASC順に並べ替えたい。MYSQL最後の3行を選択、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

完全に感謝します。 –

+1

*を使用することはお勧めできません。すべての項目に言及するのがより速いです。 – Porizm

2

これは単に、結果セットを逆方向に反復することにより、SQLクエリを変更せずに、単にPHPでもを行うことができます。

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

私はパフォーマンスの違いがあるかわからない告白します(もしあれば)、それはあなただけのスイートかもしれない別のオプションです。

+0

私はこの方法を好む、私は3つの最新のものを選択し、最も古いものを最初に出力する考えを分けていると思う(少なくとも私の考えでは:p) –

+1

できるだけ多くの作業をサーバー上で(データベース内で)できるようにし、ユーザー側でこれを(phpを使って)行う必要はありませんが、私はあなたの答えに感謝します。 –

+0

私はそれが本当に好みの問題になると思います。私は通常SQLでできるだけ多くのことをするのが好きですが、時にはコードを混乱させることがありますが、PHPははるかに読みやすく分かりやすいですが、IMHOでは逆順に反復するとコード内で実際に何が起こっているかがはっきり分かります。 – cegfault

-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

関連する問題