我正在进行网络聊天,我想在页面底部显示最后添加的消息,我希望限制最后10条消息。
我的sql查询现在看起来像:
SELECT * FROM messages WHERE chat_room=5 LIMIT 10
但这不符合我的要求。如果我在表格中有20个带有消息的项目,则此查询会选择1到10之间的项目,但我想要从10到20以及最后的消息。
表消息的UNIX时间格式(INT)<_ p>列为create_date
如何更改此查询?
答案 0 :(得分:4)
Arnep的答案几乎是正确的,但它会返回一个列表,最后一条消息在顶部....
SELECT *
FROM
(SELECT *
FROM messages
WHERE chat_room=5
ORDER BY your_date_column DESC
LIMIT 10) ilv
ORDER BY your_date_column ASC
答案 1 :(得分:3)
您应该按添加的日期排序,因为无法保证按照您将这些行插入表格的顺序存储和检索这些行。列your_date_column
包含每条消息的日期时间。
SELECT * FROM messages WHERE chat_room=5 ORDER BY your_date_column DESC LIMIT 10
答案 2 :(得分:3)
您需要按正确的顺序询问数据。
像
这样的东西SELECT * FROM messages WHERE chat_room=5 ORDER BY message_ID DESC LIMIT 10
答案 3 :(得分:2)
只需按时间戳或行ID等索引对它们进行排序即可。
SELECT * FROM messages WHERE chat_room=5 ORDER BY timestamp LIMIT 10