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 个条目。但是,理想情况下,我需要在获取行之前反转资源。

目前,我运行 2 个循环: 1 - 一个用于获取 php 数组中的所有结果 2 - 然后另一个用于处理数组以在反转后打印。

我正在尝试优化它的工作方式...是否可以在我开始获取行之前反转 mysql 资源,这样我就不必反转 php 中的数组?

或者,有没有一种方法可以让我重写查询以以相反的顺序返回所述行..但仍然像上面那样获得最新的 20 个结果?

4

1 回答 1

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
于 2012-04-17T16:14:23.960 回答