我在MySQL数据库中有表“Messages”。它有三列: MSG_ID, 用户身份, msg_content
用户可以自由添加/删除邮件。
我想要显示以下内容: 1.显示按ID排序的消息 2.如果该表恰好由同一用户连续输出2条以上的消息,则同一用户仅显示2条消息 3.一次显示10条消息
例如,如果我们有:
msg_id 1,user_id A
msg_id 2,user_id A
msg_id 3,user_id A
msg_id 4,user_id B
msg_id 5,user_id C
msg_id 6,user_id B
msg_id 7,user_id B
msg_id 8,user_id B
msg_id 9,user_id A
msg_id 10,user_id F
msg_id 11,user_id D
msg_id 12,user_id E
...
Feed会是这样的:
msg_id 1,user_id A
msg_id 2,user_id A
msg_id 4,user_id B
msg_id 5,user_id C
msg_id 6,user_id B
msg_id 7,user_id B
msg_id 9,user_id A
msg_id 10,user_id F
msg_id 11,user_id D
msg_id 12,user_id E
在mysql中实现feed“Select”语句的最佳方法是什么?
谢谢
答案 0 :(得分:2)
如果每个用户连续发布了100条消息,则必须获取500行... 虽然可以在存储过程中执行此操作,但使用附加列会更容易,例如“num”,计算来自同一用户的行中的消息。从用户ID中插入消息时检查发布消息的最后一个用户的id和num:
SELECT user_id, num FROM messages ORDER BY msg_id DESC LIMIT 1
如果新消息的user_id与从查询中获得的消息匹配,则插入num + 1;如果不匹配则插入num = 1。
然后,您可以通过简单的查询获取Feed:
SELECT * FROM messages WHERE num<=2 LIMIT 10