2012-04-17 78 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 - 然後另一個處理數組以反向打印。

我想優化這種工作方式...是否有可能扭轉mysql資源之前我開始提取行,所以我不必扭轉數組在PHP中?

或者,有沒有一種方法,我已經看過重寫查詢,以相反的順序返回上述行..但仍然得到最新的20個結果,如上所述?

回答

4

這最好在查詢中完成。將所有東西包裝在子查詢中,並按照messageTime的升序重新排序。這可以節省數據庫服務器上相當大的CPU資源比上一個更大的行集循環一堆電話來mysql_data_seek()讀取行落後比你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

也就是說輝煌!我不知道子查詢..解決! – John 2012-04-17 16:35:43