如何查询存储在表中的消息,以便获得按发件人分组的消息以及按时间排序的组?

阿努拉格

总体方案:我将对话存储在表中,我需要检索特定位置的消息,以便将它们分组为对话,然后按该组中收到的最新消息对对话组进行排序。这类似于在电话上或Facebook的新闻订阅中组织短信的方式。我将消息存储在以下架构中:

Location_id | SentByUser | Customer     | Messsage         | Time                 
1           | Yes        | 555-123-1234 | Hello world      | 2013-12-01 10:00:00
1           | No         | 555-123-1234 | Thank you        | 2013-12-01 12:00:00 
1           | Yes        | 999-999-9999 | Winter is coming | 2013-12-03 11:00:20 
1           | Yes        | 555-123-1234 | Foo Bar          | 2013-12-02 11:00:00 
1           | No         | 999-999-9999 | Thank you        | 2013-12-04 13:00:00 
1           | Yes        | 111-111-1111 | Foo Foo Bar      | 2013-12-05 01:00:00

在这种情况下,如果要为位置ID构建会话树,则需要以下输出:

Location_id | SentByUser | Customer     | Messsage         | Time                 
1           | Yes        | 111-111-1111 | Foo Foo Bar      | 2013-12-05 01:00:00
1           | Yes        | 999-999-9999 | Winter is coming | 2013-12-03 11:00:20 
1           | No         | 999-999-9999 | Thank you        | 2013-12-04 13:00:00 
1           | Yes        | 555-123-1234 | Hello world      | 2013-12-01 10:00:00
1           | No         | 555-123-1234 | Thank you        | 2013-12-01 12:00:00 
1           | Yes        | 555-123-1234 | Foo Bar          | 2013-12-02 11:00:00 

因此,我想按“客户”字段对所有对话进行分组,然后按“时间”对分组进行排序,最后对每个组内的消息进行排序。这是因为我正在构建类似于短信的界面。对于每个位置,可能会有数百个对话,而我一次只会显示几个对话。如果我确保查询输出是有序的,则不必担心服务器保持任何状态。客户可以简单地说出接下来的100条消息给我,等等。

我的问题有两个:1.是否有一种简单的方法可以对结果进行订购?是否有一种简单的方法,而无需对表本身进行复杂的联接或创建新表来维护某些顺序。2.我采用的这种做法是一种好的做法吗?与之类似,是否有更好的方法来存储和检索消息,以使服务器不必维护状态?在这种情况下,我是否应该考虑一个更好的模式?

我查看了各种问题和答案,而我能找到的最好的问题是将平板餐桌解析成树的最有效/最优雅的方法什么?,但这似乎并不完全适用于我的情况,因为作者正在谈论多分支树。

埃里克

似乎您想要两个不同的查询。这是用SQL Server的T-SQL编写的,但可以轻松地适用于SQLite或MySQL或您正在使用的任何东西。

1)告诉我最近订购的客户组

select Location_id, Customer, Max(Time) as LatestMessageTime from #Table 
group by Location_id, Customer order by LatestMessageTime desc

这类似于您的短信应用程序的第一个视图。

2)在给定Location_id和客户的情况下,按顺序显示消息

declare @Location int, @Customer varchar(900)
set @Location = 1
set @Customer = '999-999-9999'

select * from #Table where Location_id = @Location and Customer = @Customer 
order by Time desc

如果只需要示例输出,则不需要太复杂的东西:

select t.*, g.MostRecentTime from #Table t LEFT OUTER JOIN
(select Location_id, Customer, Max(Time) as MostRecentTime from #Table
group by Location_id, Customer) g on g.Location_id = t.Location_id and g.Customer = t.Customer
order by MostRecentTime desc, Location_id, Customer, Time

这是它的一个SQLFiddle:http ://sqlfiddle.com/#!6/ae3f8/1/0

我认为这是一种存储信息的可接受方法。至于检索它,我将有两个不同的存储过程:给我“摘要”(上面的1),然后给我给定位置和客户的“消息”(上面2)。我也要按顺序排列,.... Customer, Time desc以便最先返回最新的消息,然后它“返回”到过去,而不是先加载最早的消息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用于EhCache的JGROUP中的错误,未在表中丢弃消息发件人

来自分类Dev

发件人离线时如何发送XMPP消息?

来自分类Dev

发件人如何解密自己的加密消息

来自分类Dev

Bleno:如何将消息发送回发件人?

来自分类常见问题

Actor消息处理程序中捕获了哪个发件人?

来自分类Dev

Actor消息处理程序中捕获了哪个发件人?

来自分类Dev

如何使用Smack在多用户聊天消息中检索发件人姓名或其JID?

来自分类Dev

如何获取集合中每个发件人的最新消息?

来自分类Dev

如何在命名管道中识别/授权消息的发件人?(CreateNamedPipe)

来自分类Dev

如何在邮件消息中添加UTF-8“发件人:”地址?

来自分类Dev

Whats App批量消息发件人

来自分类Dev

如何使用消息传递架构将消息发送回发件人?

来自分类Dev

如何查询多个表中的数据并按时间排序?

来自分类Dev

如何查询多个表中的数据并按时间排序?

来自分类Dev

查询以获取ID为7的登录用户的所有发件人的所有消息

来自分类Dev

mysql查询以显示带有发件人和收件人的消息

来自分类Dev

如何在Outlook中按发件人的电子邮件地址而不是显示名称进行排序?

来自分类Dev

大消息发件人。转发133KB

来自分类Dev

在将消息添加到jms队列之前,如何从ESB向发件人发送响应

来自分类Dev

如何使用actioncable回复发件人客户端的消息?

来自分类Dev

在将消息添加到jms队列之前,如何从ESB向发件人发送响应

来自分类Dev

我们如何将actor处理过的消息的结果发回给实际的发件人

来自分类Dev

发送消息后,在Thunderbird扩展中获取发件人和收件人

来自分类Dev

如何知道KVO中的发件人?

来自分类Dev

通过在查询中编写发件人的名称来获得成本的降序

来自分类Dev

通过在查询中编写发件人的名称来获得成本的降序

来自分类Dev

如何使用Chromecast将消息从自定义收件人发送到发件人应用?

来自分类Dev

如何获得发件人的电子邮件地址?

来自分类Dev

如何在本机消息传递应用程序中的群聊消息上显示发件人姓名,并且如果他发送的下一条消息不显示他的名字?

Related 相关文章

  1. 1

    用于EhCache的JGROUP中的错误,未在表中丢弃消息发件人

  2. 2

    发件人离线时如何发送XMPP消息?

  3. 3

    发件人如何解密自己的加密消息

  4. 4

    Bleno:如何将消息发送回发件人?

  5. 5

    Actor消息处理程序中捕获了哪个发件人?

  6. 6

    Actor消息处理程序中捕获了哪个发件人?

  7. 7

    如何使用Smack在多用户聊天消息中检索发件人姓名或其JID?

  8. 8

    如何获取集合中每个发件人的最新消息?

  9. 9

    如何在命名管道中识别/授权消息的发件人?(CreateNamedPipe)

  10. 10

    如何在邮件消息中添加UTF-8“发件人:”地址?

  11. 11

    Whats App批量消息发件人

  12. 12

    如何使用消息传递架构将消息发送回发件人?

  13. 13

    如何查询多个表中的数据并按时间排序?

  14. 14

    如何查询多个表中的数据并按时间排序?

  15. 15

    查询以获取ID为7的登录用户的所有发件人的所有消息

  16. 16

    mysql查询以显示带有发件人和收件人的消息

  17. 17

    如何在Outlook中按发件人的电子邮件地址而不是显示名称进行排序?

  18. 18

    大消息发件人。转发133KB

  19. 19

    在将消息添加到jms队列之前,如何从ESB向发件人发送响应

  20. 20

    如何使用actioncable回复发件人客户端的消息?

  21. 21

    在将消息添加到jms队列之前,如何从ESB向发件人发送响应

  22. 22

    我们如何将actor处理过的消息的结果发回给实际的发件人

  23. 23

    发送消息后,在Thunderbird扩展中获取发件人和收件人

  24. 24

    如何知道KVO中的发件人?

  25. 25

    通过在查询中编写发件人的名称来获得成本的降序

  26. 26

    通过在查询中编写发件人的名称来获得成本的降序

  27. 27

    如何使用Chromecast将消息从自定义收件人发送到发件人应用?

  28. 28

    如何获得发件人的电子邮件地址?

  29. 29

    如何在本机消息传递应用程序中的群聊消息上显示发件人姓名,并且如果他发送的下一条消息不显示他的名字?

热门标签

归档