查找来自每个发件人的最新消息?

Find newest message from each sender?

我的应用程序中有一个“消息”菜单,但我完全不知道如何在不加载所有消息 received/sent 的情况下显示每个用户的最新消息 received/sent。

我正在使用 Parse 作为我的后端,所以我相信有一些聪明的 subqueryNSPredicate 我可以为此使用。

我想到的当前解决方案是我的消息的另一个布尔属性,其中除了最近的消息之外的所有消息都得到了增强,因此我可以知道用一个简单的谓词加载什么。虽然这看起来很草率,但请救救我!

编辑:

现在我收到用户是发件人或收件人的消息(取决于分段控件),然后显示每个发送 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

这让您可以从客户端抽象出更多逻辑,并在性能真正重要的地方简化您的查询:)