消息源的 select 语句

发布于 2024-11-03 17:24:19 字数 811 浏览 1 评论 0原文

我在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

緦唸λ蓇 2024-11-10 17:24:19

如果每个用户连续发布 100 条消息,您将必须获取 500 行...
虽然可以在存储过程中执行此操作,但是使用附加列(例如“num”)来计算来自同一用户的一行中的消息要容易得多。从用户 ID 插入消息时,检查发布消息的最后一个用户的 id 和 num:

SELECT user_id, num FROM messages ORDER BY msg_id DESC LIMIT 1

如果新消息的 user_id 与您从查询中获得的 ID 匹配,则插入 num+1,如果不匹配,则插入 num=1。
然后你可以通过简单的查询获取你的提要:

SELECT * FROM messages WHERE num<=2 LIMIT 10

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:

SELECT user_id, num FROM messages ORDER BY msg_id DESC LIMIT 1

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:

SELECT * FROM messages WHERE num<=2 LIMIT 10
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文