【问题标题】:Need help to understand this query (rails)需要帮助来理解这个查询(rails)
【发布时间】:2012-06-26 15:55:51
【问题描述】:

我有一个架构问题需要使用 rails 应用程序来解决。我有图片库,人们可以每天投票(向上或向下)。这些图片按其分数和 created_at 时间戳排序,因此我们获得了包含 48 张图片的顶级图片库(即使当天上传的图片超过 48 张)。

除了当天的顶部,您还可以看到昨天和前两天的顶部图像……我想添加一个功能,允许某人在选择一张图像时查看画廊的上一张图像……换句话说,您可以选择 5/48 的图像,然后可以通过单击箭头转到 4/48 的图像(上一张)……

以同样的方式,昨天第一个顶部图像的前一个图像应该引导您到今天的最后一个顶部图像......

这可能很简单,但我找不到合适的查询来完成这项工作……请问有什么建议吗?

谢谢

【问题讨论】:

  • 您能分享您的数据库架构吗?你有一个单独的顶部图像表吗?它有哪些列?您是否在图像表中保留了赞成/反对票的总和?我猜你想要ORDER BY created_at DESC, score DESC
  • 不,我没有单独的顶部图像表(即使我认为使用单独的顶部图像表执行一些 OLAP 可能是个好主意)。架构非常基本:我在分数列中保留了赞成/反对票的总和,到目前为止,是的,我使用了 ORDER BY created_at DESC, score DESC
  • 我弄错了,是ORDER BY created_at ASC, score DESC,因为您希望上一个链接在到达得分最高的图像后及时回到前一天。

标签: sql ruby-on-rails


【解决方案1】:

你说的是面包屑。我没有使用过 Ruby,但这里有一个不同的问题,谁的答案可能就是你要找的东西

Breadcrumbs in Ruby on Rails

【讨论】:

  • 不,我不是在谈论面包屑,面包屑会保留访问过的链接的历史记录,这不是我想要的。想象一下,你打开一个页面,直接看这个页面上的第四张图片,然后你想转到第三张图片(上一张图片)
【解决方案2】:

好吧,如果您已经有查询以正确的顺序获取图像并且知道当前图像,那么很容易找到下一张/上一张。假设 @id 是您当前的图像 ID,您可以执行以下操作:

top_images = Image.order("created_at ASC, score DESC")
prev = top_images.where("id < ?", @id).limit(1)
next = top_images.where("id > ?", @id).limit(1)

如果您希望“上一个”链接在达到当天排名第一的图片后及时返回,ORDER BY created_at ASC, score DESC 更有意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 2019-08-11
    • 2020-08-06
    • 1970-01-01
    相关资源
    最近更新 更多