2012-04-17 3 views
1
//get the messages from the database 
$messagesID_query = mysql_query("SELECT 
            messageID, 
            posterID, 
            messageTime, 
            message 
           FROM 
            chat_messages 
           ORDER BY 
            messageTime DESC 
           LIMIT 
            20"); 

上記のmysql_queryは、テーブルから最新の20エントリを返します。しかし、私は理想的には、行をフェッチする前にリソースを元に戻す必要があります。mysqlリソースを逆にする

現時点では、私は2ループを実行します: 1 - PHPの配列 のすべての結果をフェッチするために2つ - 次にもう一度印刷する配列を処理する別のもの。

私はこの仕組みを最適化しようとしています...私はPHPで配列を逆にする必要はありませんので、私は行をフェッチを開始する前にmysqlリソースを逆にすることは可能ですか?

または、上記の行を逆順に返すようにクエリを書き直す方法がありますか?しかし、上記のように最新の20件の結果が得られますか?

答えて

4

これはクエリで最も適切です。全体をサブクエリでラップし、昇順に並べ替えます(messageTime)。これは素晴らしいです、あなたの20

SELECT * FROM 
(
    SELECT 
    messageID, 
    posterID, 
    messageTime, 
    message 
    FROM 
    chat_messages 
    /* Subquery is used to get the most recent 20 by messageTime */ 
    ORDER BY messageTime DESC 
    LIMIT 20 
) subq 
/* Reorder the result of the subquery to put them back into ascending order */ 
ORDER BY messageTime ASC 
+0

より大きい行セットに後方行をフェッチするmysql_data_seek()への呼び出しの束をループ上のデータベース・サーバ上でかなりのCPUリソースを節約することができます!私はサブクエリについて知りませんでした..解決! – John

関連する問題