数据库表 articles
包含 10.000 行(articles)
我想得到一篇随机文章,将其标记为已读并且再也不会得到它,
所以我的下一个获取请求应该返回随机文章,除了那个。
有成千上万的用户像我一样,他们都在使用这张表。
我该如何实现?如何标记这些文章,以及如何只搜索未读文章?
我试图在 Articles
表中创建列 relatedUsers
,其中填充了与已阅读文章的用户对象的关系。我正在使用搜索查询:relatedUsers.objectId!=currentUserId
但是当此列获得 2+ relatedUsers 时,此解决方案停止工作,因为数据库返回的文章至少有一个 relatedUser,其 objectId 不是t 等于 currentUserId
(表示所有用户)。
我现在正在使用 Backendless.com,但如果我猜的话,该解决方案应该适用于任何数据库,包括 backendless。如果不是,那么我应该使用哪种数据库?
最佳答案
您现在可以做的是:
- 创建一个名为
UserArticle
的表,其中包含字段articleId
和userId
- 当你添加一个用户或一篇文章时,你也应该在这个表中分别添加到所有文章或用户的关系;这样,您的
UserArticle
表将包含文章与尚未阅读这些文章的用户之间的关系 - 为了让用户随机获得一篇未读文章,您:
- 从
UserArticle
中检索项目,其中userId = yourCurrentUserId
- 随机选择其中一篇文章并通过其ID检索一篇文章
- 通过
articleId
和userId
从UserArticle
中移除选中的文章,表示用户已阅读该文章
- 从
这种方法最适合您的情况。它涉及的要求不止一个,但目前您的要求再合适不过了。
此外,我们(Backendless 团队)正在研究一个像 contains
这样的关键字,使用它你将只能与 Users 表有关系并且不会在一个请求中阅读文章,所以建议的方法是非常临时的。
关于sql - 如何获取随机未读文章?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33711690/