【问题标题】:Query database starting from a certain id从某个id开始查询数据库
【发布时间】:2016-12-31 12:51:29
【问题描述】:

我的应用程序的功能类似于 Tinder。我将完成工作流程。

  • 应用加载 10 个Hunts(如 tinder 配置文件)
  • 用户接受或拒绝它
  • 一旦用户接受或拒绝,搜索就会被移除(标记为已看到,这样它就不会再次出现)
  • Hunts 计数变为 2 时,应用会加载接下来的 10 次搜索。 (这不是第二页,因为 seen 的搜索已经被删除

这是棘手的部分。当它再次查询数据库时,该搜索将有 2 个用户尚未接受或拒绝的搜索。为了避免重复,我避免从响应中进行前 2 次搜索。但是,如果在再接受或拒绝之后运行查询,则会出现问题。我会删除 2 个预期正常行为的狩猎,但这会删除一个不重复的狩猎。

最好的解决方案是获取某个id之后的所有狩猎。我可以通过传递ID来使用WHERE NOT ID IN。但我想知道是否有更好的解决方案,因为我认为这将是一个非常常见的情况。

我希望我说得很清楚。

我想过但不是很喜欢的解决方案

  1. 将 2 次搜索中的 ids 传回并在结果中排​​除它们
  2. 在我的应用收到回复后,从hunts 中删除重复项

欢迎所有建议。我正在使用Rails,所以也欢迎active record 解决方案。

【问题讨论】:

    标签: mysql sql ruby-on-rails


    【解决方案1】:

    unseenrejectedaccepted 添加一个值为 0、1、2 的 status 列可能是明智之举。

    然后,当您的用户接受/拒绝每个项目时,更新该列。

    要为用户获取最旧(最低-id-value)的项目块,请使用类似这样的方法。

          WHERE user=whatever AND status=0
          ORDER BY id
          LIMIT 10
    

    (user, status, id) 上建立索引,MySQL 可以优化这个查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      相关资源
      最近更新 更多