- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个如下所示的消息表:
Messages
+-----+------------+-------------+--------------+
| id | sender_id | receiver_id | created_at |
+-----------------------------------------------+
| 1 | 1 | 2 | 1/1/2013 |
| 2 | 1 | 2 | 1/1/2013 |
| 3 | 2 | 1 | 1/2/2013 |
| 4 | 3 | 2 | 1/2/2013 |
| 5 | 3 | 2 | 1/3/2013 |
| 6 | 5 | 4 | 1/4/2013 |
+-----------------------------------------------+
“线程”是给定的 sender_id 和 receiver_id 之间的一组消息 我希望查询返回 最近 10 个线程的最近 10 条消息 其中 sender_id 或 receiver_id 是给定的 ID。
给定 user_id 为 5 时的预期输出:
+-----+------------+-------------+--------------+
| id | sender_id | receiver_id | created_at |
+-----------------------------------------------+
| 1 | 5 | 2 | 1/4/2013 |
| 2 | 5 | 2 | 1/4/2013 |
| 3 | 2 | 5 | 1/4/2013 |
| 4 | 3 | 5 | 1/4/2013 |
| 5 | 5 | 2 | 1/3/2013 |
| 6 | 5 | 4 | 1/3/2013 |
+-----------------------------------------------+
例如,用户 5 和 2 之间最多 10 条消息(上面有 4 个)和最多 10 个线程(上面有 3 个)。
我一直在尝试使用子查询进行此类查询,但未能获得不同线程数量的第二个限制。
SELECT * FROM (SELECT DISTINCT ON (sender_id, receiver_id) messages.*
FROM messages
WHERE (receiver_id = 5 OR sender_id = 5) ORDER BY sender_id, receiver_id,
created_at DESC)
q ORDER BY created_at DESC
LIMIT 10 OFFSET 0;
我正在考虑创建一个新的 Thread 表,其中包含一个 thread_id 字段,该字段是 sender_id + receiver_id 的串联,然后只是加入 Messages,但我偷偷怀疑它应该只用一个表就可以实现。
最佳答案
我能想到在一个查询中解决您的问题的最简洁的查询是以下查询:
select * from (
select row_number()
over (partition by sender_id, receiver_id order by created_at desc) as rn, m.*
from Messages m
where (m.sender_id, m.receiver_id) in (
select sender_id, receiver_id
from Messages
where sender_id = <id> or receiver_id = <id>
group by sender_id, receiver_id
order by max(created_at) desc
limit 10 offset 0
)
) res where res.rn <= 10
row_number() over (partition by sender_id, receiver_id order by created_at desc)
列将包含每个线程中每条消息的行号(如果您运行单独查询以仅查询一个线程)。除了这个行号之外,如果消息包含在最顶层的 10 个线程中(由 ...query... 中的 (m.sender_id, m.receiver_id) 创建),您还可以查询消息本身。最后,由于您只需要 10 条最上面的消息,因此您将行号限制为小于或等于 10。
我正在做一个项目,具体来说是一个网站,其中有一个收件箱或消息,用户可以在其中向其他用户发送消息。 我正在网上查看如何为此创建数据模型,你能帮我解决这个问题吗?我一开始所做的是将他们尝试输入的每条文本或
我目前正在尝试使用 Perl 连接到 gmail 收件箱和 Net::IMAP::Client 使用以下代码 use strict; use warnings; use Net::IMAP::Clie
我想制作一个桌面应用程序,它可以从通过 USB 数据线连接到 PC 的安卓手机读取短信。有没有可能我在网上搜索过任何入门点,有关于通过 android 应用程序阅读短信的教程...有人可以指导我正确的
我有一个用于删除邮件的收件箱代码。 如果我选择一条消息,它将删除所有消息。 我该如何解决这个问题? 这是我的delete_message.php代码: 这是 inbox.php 中带有复选框的代码
这个问题在这里已经有了答案: How to send email in Android ? [duplicate] (3 个答案) 关闭 8 年前。 如何在我们的应用中打开收件箱。 final St
今天我看到了收件箱应用程序。 (来源:cbsistatic.com) 我想知道如何在工具栏(searchButton 的左侧)上制作那个切换按钮。我没有找到对(或者我搜索不多)的引用。 谢谢^^ 最佳
我想使用 Google.GData.Client.dll 阅读我的 Gmail 收件箱。我该如何做到这一点?我想要一个示例程序。 最佳答案 我找到了 GMailAtomFeed // Creat
我有代码可以搜索用户的 Outlook 并根据您在工作表单元格中输入的主题短语回复电子邮件。几天前我确实让它工作了,但现在我似乎无法让它工作(已被删除)。运行后,将持续显示代码行“Set olitem
我正在尝试连接到本地托管的电子邮件 POP3 收件箱并在邮箱中显示电子邮件,但我不断收到错误: Exception in thread "main" javax.mail.MessagingExcep
我想使用 java (SE) 在 MS Outlook (2010) 中阅读我的收件箱,然后将消息/电子邮件移动到另一个文件夹。我曾尝试在网络上搜索,但只找到了许可的解决方案或几年前的帖子。有人对此步
这个问题在这里已经有了答案: launch sms application with an intent (22 个答案) 关闭 7 年前。 我想在我的应用程序中点击一个按钮来打开 Android
我正在运行 Xubuntu 13.04 并安装了最新版本的 libcurl/curl: $ curl -V curl 7.29.0 (i686-pc-linux-gnu) libcurl/7.29.0
我正在做一个项目,用户将首先保存他的 gmail id 和密码,确认后,我将提供一个链接,下次无需输入他的 gmail id 和密码,直接登录 gmail.. 保存的密码将作为参数传递使用 CURL
如何使用 ASP.NET 3.5 和 C# 向 facebook 用户收件箱发送消息?我可以使用 fbAPI.Stream.Publish() 在墙上发布消息,但我需要将消息发送到收件箱,并且必须是个
我正在尝试通过 google 找到的这段代码,但它没有连接到我的 gmail 收件箱。为什么? 我收到此错误消息: --------------processing mails started---
我想将通过 C2DM 收到的消息发送到手机的 SMS 收件箱,并得出结论,这可能是通过让 Android 认为 C2DM 是真正的 SMS 并让它发挥其魔力来实现的。 我已经追踪了相当多的 Andro
我正在尝试从 Gmail 地址(或主题)获取特定电子邮件。我使用 selenium 是因为这个 gmail 帐户无法使用 imaplib。我卡在这里: driver.find_element_by_i
我使用修改自以下代码的一些代码成功连接并阅读我的 Outlook 收件箱:Reading e-mails from Outlook with Python through MAPI 。我想做的是在我的
我从这里得到了一个代码来下载 gmail 收件箱: http://davidwalsh.name/gmail-php-imap use these 2 hostnames $hostname = '{
我需要在 TableView 中显示其他参与者的姓名和图像,就像 Facebook 收件箱一样。我正在使用此 fql 查询来获取收件人。 - (void)readInbox { NSStrin
我是一名优秀的程序员,十分优秀!