2012-04-17 79 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