首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对已添加到一起的2个数组进行排序

对已添加到一起的2个数组进行排序
EN

Stack Overflow用户
提问于 2013-11-11 21:24:49
回答 3查看 51关注 0票数 0

在我的应用程序中,用户可以创建他们的作品可能在也可能不在的画廊。用户拥有和属于许多画廊,每个画廊都有一个由画廊的user_id字段指定的“创建者”。

因此,要获得用户所处的5个最新的图库,我可以这样做:

代码语言:javascript
复制
included_in = @user.galleries.order('created_at DESC').uniq.first(5)
# SELECT DISTINCT "galleries".* FROM "galleries" INNER JOIN "galleries_users" ON "galleries"."id" = "galleries_users"."gallery_id" WHERE "galleries_users"."user_id" = 10 ORDER BY created_at DESC LIMIT 5

为了获得他们创建的5个最新的画廊,我可以:

代码语言:javascript
复制
created = Gallery.where(user_id: id).order('created_at DESC').uniq.first(5)
# SELECT DISTINCT "galleries".* FROM "galleries" WHERE "galleries"."user_id" = 10 ORDER BY created_at DESC LIMIT 5

我想把这两幅画放在一起,这样它们就可以创建最新的5家画廊了。类似于:

代码语言:javascript
复制
(included_in + created).order('created_at DESC').uniq.first(5)

有人知道如何构造一个高效的查询或查询后循环来实现这个功能吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-11 21:55:42

order不可用,但您可以按照jvnillthis answer中的建议使用sort -或sort_by

如前所述,您可以使用以下代码:

代码语言:javascript
复制
(included_in + created).sort_by(&:created_at).uniq.first(5)
票数 1
EN

Stack Overflow用户

发布于 2013-11-11 21:51:35

不如:

代码语言:javascript
复制
Gallery.joins("LEFT JOIN galleries_users ON galleries.id = galleries_users.gallery_id")
  .where("galleries_users.user_id = :user_id OR galleries.user_id = :user_id", user_id: id)
  .order("galleries.created_at DESC")
  .limit(5)

我假设您的HABTM连接表的名称是galleries_users (这是默认的)。

票数 0
EN

Stack Overflow用户

发布于 2013-11-11 21:27:21

合并这两个查询并从联合中选择订单。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19916260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档