我想返回一个帖子列表,例如。
@Query("SELECT * FROM posts")
List<Post> getPosts()
我有一个 pojo。
post {
name:String
id :String
postUid:String
userHasNewContent:Boolean
}
现在,我希望列表中的每个帖子都有 userHasNewContent:Boolean
,通过检查拥有此帖子的用户是否有新内容(不超过一周)来填充
所以我试过了。
@Query("SELECT *,
(SELECT content_uid FROM content WHERE content_uid = postUid AND
contentTime < :aWeekAgo)AS userHasNewContent
FROM posts")
List<Post> getPosts(String aWeekAgo)
WHERE 内容是: 内容{ contentTime:Long//Unix时间戳 编号:字符串
和
public static Long aWeekAgo() {
long day = (1000 * 60) * 60 * 24;
return System.currentTimeMillis() - day * 7;
}
这似乎没有按预期工作,我这样做了吗?
编辑 好了,问题写完了,我想做什么就很清楚了。这是简短版本。
//Get all posts
@Query("SELECT * FROM posts")
List<Post> getPosts()
//Then loop through them.
@Query("SELECT count(*) FROM content WHERE contentId :contentUID AND soundTime < : aWeekAgo")
int checkIfUserHasNewContent(String uid, long aWeekAgo);
List<Post> postsWithNewContentIndicator = new ArrayList<>();
for (Post post : postsFromDb) {
post.userHasNewContent(checkIfUserHasNewContent(post.getUid()) > 0);
postsWithNewContentIndicator.add(post);
}
所以,但我想通过单个查询来完成此操作,而不是使用此循环。
最佳答案
您需要将查询重写如下
SELECT
*,
(
(
SELECT
COUNT(*)
FROM
(
SELECT
content_uid
FROM
content
WHERE
content_uid = postUid
AND contentTime > : aWeekAgo
)
)> 0
) AS userHasNewContent
FROM
posts
关于java - 来自子查询的 SQLite : How to populate a boolean field on a pojo,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53757100/