【问题标题】:Rails, How to Combine two queries and then user a third query to subtract values from the first to?Rails,如何组合两个查询,然后使用第三个查询从第一个查询中减去值?
【发布时间】:2011-12-23 20:04:49
【问题描述】:

我有这样的事情:

@users_x = returns 0 or more records with (id, user_id, etc...)
@users_y = returns 0 or more records with (id, user_id, etc...)
@users_z = returns 0 or more records with (id, user_id, etc...)

我感兴趣的是 user_ids。我想在保持顺序的同时获取@users_x + @user_y 的用户 ID 列表。然后取@users_z 中的 user_ids 并从组合列表 (x+y) 中减去它。最后得到一个 user_ids 列表。

我怎样才能用 ruby​​ + rails 解决这个问题?谢谢

【问题讨论】:

    标签: ruby-on-rails ruby arrays ruby-on-rails-3 map


    【解决方案1】:

    类似

    (@users_x.collect(&:user_id) + @users_y.collect(&:user_id)) - @users_z.collect(&:user_id)

    应该可以解决问题。如果@users_x 和@users_y 中都出现了id,你可能想在其中扔一个uniq

    【讨论】:

    • 谢谢!我将如何制作这个独特的?另外,您确定订单被保留了吗?
    • 我很确定没有保留我需要的订单。我刚刚尝试过,组合的结果是数字顺序,而不是 users_x 在 users_y 等之上......
    • 这只是连接两个数组——第一部分的 id 与它们在@users_x 中的顺序完全相同,第二部分将包含来自@users_y 的那些。您可以致电uniq 让事情变得独一无二
    • 哦,有趣的是,我正在运行一个 User.find(suggested_user_ids),它以正确的顺序查询: SELECT "users".* FROM "users" WHERE "users"."id " IN (8613, 8614, 8615, 8616, 8617, 8618, 8619, 8620, 8621, 7591, 8424, 8423, 8422, 8421, 8420, 8419, 8418, 8417, 8416, 8415) -- 出于某种原因不是按 IN 顺序排序?有什么方法可以让rails根据IN返回订单?
    • 这很正常 - 使用 IN 子句并不规定排序顺序。您可以使用 ruby​​ 或 ORDER BY FIELD(id, 8621, 7591,8424,...)
    猜你喜欢
    • 2019-03-12
    • 1970-01-01
    • 2020-03-09
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 2013-01-02
    相关资源
    最近更新 更多