好吧,我的问题比标题说的要困难一点......
我有一个消息表,我使用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)
有没有办法做这样的事情......?
"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)
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()计算.
| 归档时间: |
|
| 查看次数: |
2230 次 |
| 最近记录: |