我目前在OrientDB数据库中有以下图表:
其中包含以下属性:
基本上User
可以是所谓的Thread
的一部分,这由IsMember
边缘设置。如果他们是成员,他们可以向线程发送Message
。
在IsMember边缘内部还有一个last_read
属性,其类型为DateTime,这是它们上次打开线程的日期。因此,如果我们尝试使用较新的created_at
获取所有消息,我们将获得所有未读消息。完成此操作的查询可能如下所示(群集12 =用户14 =线程):
SELECT * FROM Message
let $LR = (select lastRead.asLong() from IsMember where in = #12:1320782 AND out = #14:705856)
WHERE in = #14:705856 AND out = #12:1320782 AND created_at.asLong() > $LR[0].lastRead
这很棒,除了我想为所有线程显示一个未读的计数器。对于所有线程使用此查询,用户是会员,在某些情况下最多使用200-300个查询。
所以基本上我正在寻找一个能够获取用户所有线程的所有未读消息的查询。
额外有用的查询: 获取用户的所有订阅线程的查询看起来像这样:
select expand(out) from (
select * from IsMember where in = 12:1320782
)
查询从给定的用户和线程获取lastRead属性
select lastRead.asLong() from IsMember where in = #12:1320782 AND out = #14:705856
答案 0 :(得分:1)
尝试此查询
select in.nick as user ,out.title as thread ,$a.size() as count from IsMember
let $a=(select created_at from Message where out.nick=$parent.current.in.nick and in.title=$parent.current.out.title and created_at > $parent.current.last_read)