消息源的 select 语句
我在 MySQL 数据库中有表“Messages”。它有三列: 消息 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
...
提要将是这样的:
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中实现提要“Select”语句的最佳方法是什么?
谢谢
I have table "Messages" in MySQL database. It has three columns:
msg_id,
user_id,
msg_content
Users add/remove messages freely.
I want to display a feed that:
1. display messages ordered by id.
2. display only 2 messages by the same user, if the table happens to have more than 2 messages in a row by the same user.
3. display 10 messages at a time
For example, if we have:
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
...
The feed will be something like this:
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
what is the best way implement the feed "Select" statement in mysql?
Thank you
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果每个用户连续发布 100 条消息,您将必须获取 500 行...
虽然可以在存储过程中执行此操作,但是使用附加列(例如“num”)来计算来自同一用户的一行中的消息要容易得多。从用户 ID 插入消息时,检查发布消息的最后一个用户的 id 和 num:
如果新消息的 user_id 与您从查询中获得的 ID 匹配,则插入 num+1,如果不匹配,则插入 num=1。
然后你可以通过简单的查询获取你的提要:
If every user posted 100 messages in a row you would have to fetch 500 rows...
While it is possible to do it in stored procedure it is much easier with additional column, lets say "num", counting messages in a row from the same user. While inserting a message from user id check id and num of last user that posted a message with:
and insert num+1 if user_id of new message matches the one you got from query or insert with num=1 if not.
Then you can get your feed with simple query: