mysql在单个查询中查询最新的10个结果

Ben*_*ene 2 php mysql

好吧,我的问题比标题说的要困难一点......

我有一个消息表,我使用while循环在PHP中加载所有这些消息.

我的SQL查询目前看起来像这样:

"SELECT * 
 FROM messages 
 WHERE thread_id = '" . $thread_id . "'
 ORDER BY date_sent"
Run Code Online (Sandbox Code Playgroud)

工作正常,并返回所有消息后,所以我在底部有最新消息(这很重要,因为我的消息模块像facebook一样工作,底部有一个小的回复字段,让用户直接聊天)

现在,我想要的是一个查询,它只能在一个查询中给我最新的10个结果.

我已经有想要的结果数量($ number_of_results = 10;)

它真的很酷,如果我不必先计算结果的行数,而是在单个查询中请求结果.

就像是:

"SELECT * 
 FROM messages 
 WHERE thread_id = '" . $thread_id . "'
 ORDER BY date_sent 
 LIMIT TOTAL_NUMBER_OF_ROWS_WHERE_THREAD_ID_IS_MY_THREAD_ID-$number_of_results, $number_of_results"
Run Code Online (Sandbox Code Playgroud)

有没有办法做这样的事情......?

Rol*_*DBA 6

"SELECT * 
 FROM messages 
 WHERE thread_id = '" . $thread_id . "' 
 ORDER BY date_sent DESC 
 LIMIT 10";
Run Code Online (Sandbox Code Playgroud)

确保你有这个索引

ALTER TABLE messages 
ADD INDEX threadid_datesent_ndx( thread_id, date_sent );
Run Code Online (Sandbox Code Playgroud)

如果你想再次颠倒10,那么这样做:

"SELECT * 
 FROM
 (
     SELECT * 
     FROM messages 
     WHERE thread_id = '" . $thread_id . "' 
     ORDER BY date_sent DESC LIMIT 10
 ) A
 ORDER BY date_sent";
Run Code Online (Sandbox Code Playgroud)


Ami*_*Ami 5

LIMIT限制结果集,SQL_CALC_FOUND_ROWS计算在没有LIMIT的情况下返回的行数.

SELECT SQL_CALC_FOUND_ROWS *
FROM messages
WHERE thread_id = :thread_id
ORDER BY date_sent DESC
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

然后用来mysql_num_row()计算.