查找来自每个发件人的最新消息?
Find newest message from each sender?
我的应用程序中有一个“消息”菜单,但我完全不知道如何在不加载所有消息 received/sent 的情况下显示每个用户的最新消息 received/sent。
我正在使用 Parse 作为我的后端,所以我相信有一些聪明的 subquery
或 NSPredicate
我可以为此使用。
我想到的当前解决方案是我的消息的另一个布尔属性,其中除了最近的消息之外的所有消息都得到了增强,因此我可以知道用一个简单的谓词加载什么。虽然这看起来很草率,但请救救我!
编辑:
现在我收到用户是发件人或收件人的消息(取决于分段控件),然后显示每个发送 to/received 的用户及其最新消息的样本.
现在我正在使用内部逻辑来做这件事,还在弄清楚(现在的逻辑有点倒退......)
let query = PFQuery(className: "Messages")
if recievedOrSent {
query.whereKey("other", equalTo: userName)
print("called OTHER query")
} else {
query.whereKey("sender", equalTo: userName)
print("called SENDER query")
}
query.addDescendingOrder("createdAt")
query.findObjectsInBackgroundWithBlock {
(objects, error) -> Void in
if error == nil {
if thisSender == userName || self.recievedUsers.contains(thisSender) && self.lesserDate(thisTime, rhs: self.recievedUsersTimes[self.recievedUsers.indexOf(thisSender)!])
{} else {
self.recievedUsers.append(thisSender)
self.recievedUsersMsg.append(thisMessage)
self.recievedUsersTimes.append(thisTime)
self.recievedUsersMsgRead.append(thisRead)
}
if thisOther == userName || self.sentUsers.contains(thisOther) && self.lesserDate(thisTime, rhs: self.sentUsersTimes[self.sentUsers.indexOf(thisOther)!])
{} else {
self.sentUsers.append(thisOther)
self.sentUsersMsg.append(thisMessage)
self.sentUsersTimes.append(thisTime)
self.sentUsersMsgRead.append(thisRead)
}
}
如果您只想从与您对话的每个用户那里获取最近的 消息,请新建一个名为RecentMessage
的class并在 Message
class.
上每次使用 afterSave 云函数 更新它
在 afterSave 挂钩中,在 RecentMessage
class 中维护一个指向每个用户对话中最新 Message
的指针。然后你所要做的就是查询当前用户的所有 RecentMessage
对象并在 Message
指针上使用 includeKey
。
这让您可以从客户端抽象出更多逻辑,并在性能真正重要的地方简化您的查询:)
我的应用程序中有一个“消息”菜单,但我完全不知道如何在不加载所有消息 received/sent 的情况下显示每个用户的最新消息 received/sent。
我正在使用 Parse 作为我的后端,所以我相信有一些聪明的 subquery
或 NSPredicate
我可以为此使用。
我想到的当前解决方案是我的消息的另一个布尔属性,其中除了最近的消息之外的所有消息都得到了增强,因此我可以知道用一个简单的谓词加载什么。虽然这看起来很草率,但请救救我!
编辑:
现在我收到用户是发件人或收件人的消息(取决于分段控件),然后显示每个发送 to/received 的用户及其最新消息的样本.
现在我正在使用内部逻辑来做这件事,还在弄清楚(现在的逻辑有点倒退......)
let query = PFQuery(className: "Messages")
if recievedOrSent {
query.whereKey("other", equalTo: userName)
print("called OTHER query")
} else {
query.whereKey("sender", equalTo: userName)
print("called SENDER query")
}
query.addDescendingOrder("createdAt")
query.findObjectsInBackgroundWithBlock {
(objects, error) -> Void in
if error == nil {
if thisSender == userName || self.recievedUsers.contains(thisSender) && self.lesserDate(thisTime, rhs: self.recievedUsersTimes[self.recievedUsers.indexOf(thisSender)!])
{} else {
self.recievedUsers.append(thisSender)
self.recievedUsersMsg.append(thisMessage)
self.recievedUsersTimes.append(thisTime)
self.recievedUsersMsgRead.append(thisRead)
}
if thisOther == userName || self.sentUsers.contains(thisOther) && self.lesserDate(thisTime, rhs: self.sentUsersTimes[self.sentUsers.indexOf(thisOther)!])
{} else {
self.sentUsers.append(thisOther)
self.sentUsersMsg.append(thisMessage)
self.sentUsersTimes.append(thisTime)
self.sentUsersMsgRead.append(thisRead)
}
}
如果您只想从与您对话的每个用户那里获取最近的 消息,请新建一个名为RecentMessage
的class并在 Message
class.
在 afterSave 挂钩中,在 RecentMessage
class 中维护一个指向每个用户对话中最新 Message
的指针。然后你所要做的就是查询当前用户的所有 RecentMessage
对象并在 Message
指针上使用 includeKey
。
这让您可以从客户端抽象出更多逻辑,并在性能真正重要的地方简化您的查询:)