sql - 如何获取随机未读文章?

标签 sql database random backendless

数据库表 articles 包含 10.000 行(articles) 我想得到一篇随机文章,将其标记为已读并且再也不会得到它, 所以我的下一个获取请求应该返回随机文章,除了那个。 有成千上万的用户像我一样,他们都在使用这张表。

我该如何实现?如何标记这些文章,以及如何只搜索未读文章?

我试图在 Articles 表中创建列 relatedUsers,其中填充了与已阅读文章的用户对象的关系。我正在使用搜索查询:relatedUsers.objectId!=currentUserId 但是当此列获得 2+ relatedUsers 时,此解决方案停止工作,因为数据库返回的文章至少有一个 relatedUser,其 objectId 不是t 等于 currentUserId(表示所有用户)。

我现在正在使用 Backendless.com,但如果我猜的话,该解决方案应该适用于任何数据库,包括 backendless。如果不是,那么我应该使用哪种数据库?

最佳答案

您现在可以做的是:

  1. 创建一个名为 UserArticle 的表,其中包含字段 articleIduserId
  2. 当你添加一个用户或一篇文章时,你也应该在这个表中分别添加到所有文章或用户的关系;这样,您的 UserArticle 表将包含文章与尚未阅读这些文章的用户之间的关系
  3. 为了让用户随机获得一篇未读文章,您:
    1. UserArticle 中检索项目,其中 userId = yourCurrentUserId
    2. 随机选择其中一篇文章并通过其ID检索一篇文章
    3. 通过articleIduserIdUserArticle中移除选中的文章,表示用户已阅读该文章

这种方法最适合您的情况。它涉及的要求不止一个,但目前您的要求再合适不过了。

此外,我们(Backendless 团队)正在研究一个像 contains 这样的关键字,使用它你将只能与 Users 表有关系并且不会在一个请求中阅读文章,所以建议的方法是非常临时的。

关于sql - 如何获取随机未读文章?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33711690/

相关文章:

jquery - jQuery随机YouTube视频生成器[HELP]

sql - 对表中的所有 SQL 行减去相同的数字

SQL 年度总和报告,寻找优雅的解决方案

java - Android SQLite 中的 WHERE 子句

php - 为什么 PHP 会这样选择随机值?

algorithm - 什么RNG(随机数生成器)算法适合扑克牌洗牌?

mysql - 获取用户关注的个人资料的帖子

sql - Postgresql 将时间戳舍入到最接近的 30 秒

php - 在 CodeIgniter 中用数组更新数据库字段

python - 重组DataFrame并写入SQL数据库