相关疑难解决方法(0)

将对象数组转换为ActiveRecord :: Relation

我有一个对象数组,我们称之为Indicator.我想def self.subjects在这个数组上运行Indicator类方法(变种类,范围等).我知道在一组对象上运行类方法的唯一方法是让它们成为ActiveRecord :: Relation.所以我最终要求添加一个to_indicators方法Array.

def to_indicators
  # TODO: Make this less terrible.
  Indicator.where id: self.pluck(:id)
end
Run Code Online (Sandbox Code Playgroud)

有时我会链接相当多的这些范围来过滤类方法中的结果.所以,即使我在ActiveRecord :: Relation上调用一个方法,我也不知道如何访问该对象.我只能通过它来获取它的内容all.但是all是一个数组.那么我必须将该数组转换为ActiveRecord :: Relation.例如,这是其中一种方法的一部分:

all.to_indicators.applicable_for_bank(id).each do |indicator|
  total += indicator.residual_risk_for(id)
  indicator_count += 1 if indicator.completed_by?(id)
end
Run Code Online (Sandbox Code Playgroud)

我想这可以归结为两个问题.

  1. 如何将对象数组转换为ActiveRecord :: Relation?最好不要where每次都做.
  2. def self.subjectsActiveRecord :: Relation上运行类型方法时,如何访问ActiveRecord :: Relation对象本身?

谢谢.如果我需要澄清任何事情,请告诉我.

ruby activerecord ruby-on-rails

93
推荐指数
3
解决办法
6万
查看次数

Laravel:按顺序排列

我正在使用SphinxSearch查询一些内容并拥有我想用MySQL查询的对象的id.我的ID数组根据Sphinx给出的等级排序.因此,我想像这样制作一个MySQL:

SELECT * FROM table WHERE id IN (1,17,2) 
ORDER BY FIELD(id,1,17,2)
Run Code Online (Sandbox Code Playgroud)

我知道我能做到:

Table::whereIn('id', $ids)->get();
Run Code Online (Sandbox Code Playgroud)

但我无法得到我的订单.

我怎么能用Laravel以适当的方式做到这一点?

php mysql sphinx laravel

19
推荐指数
2
解决办法
1万
查看次数

ActiveRecord按外部数组排序

我有一组id,存储在一些外部存储(rails cache或redis)中.在控制器的操作中,我获取此数据并使用它选择对象,即

ids = [5, 1, 17, 84] # really fetched from external source
result = MyModel.where(:id => ids)
Run Code Online (Sandbox Code Playgroud)

我也希望它的顺序与array_of id中的id相同:

ids == result.map(&:id) # => true
Run Code Online (Sandbox Code Playgroud)

作为解决方法,我使用mysql FIELD函数排序:

MyModel.where(:id => ids).order("FIELD(id, #{ids.join ', '})")
Run Code Online (Sandbox Code Playgroud)

但我不喜欢这种方法,因为它是特定于mysql的,并且在大ids数组的情况下创建非常长的查询.有没有更好的,与DB无关的方法呢?从数据库获取未分类的数据并在ruby端进行排序是不可取的,因为它资源昂贵并且难以与分页一起使用.

谢谢.

sorting activerecord ruby-on-rails

13
推荐指数
3
解决办法
3030
查看次数

按列表中的值对查询集进行排序

是否可以通过查询中提供的元素列表对django查询集进行排序?例如,如果我这样做

m.objects.filter(id__in=[3,1,8])
Run Code Online (Sandbox Code Playgroud)

我不希望查询集的顺序是id 3的元素,id 1的元素和id 8的元素.

谢谢

python django

10
推荐指数
4
解决办法
9434
查看次数

IN()子句中的PostgreSQL ORDER BY值

好的,有一些关于如何做到这一点的答案.但所有答案都假设查询选择了全部.如果您有明确的选择,则方法不再有效.

请参阅此处了解该方法:在Postgresql中模拟MySQL的ORDER BY FIELD()

基本上我有

SELECT DISTINCT id 
FROM items 
WHERE id IN (5,2,9) 
ORDER BY
 CASE id
  WHEN 5 THEN 1 
  WHEN 2 THEN 2
  WHEN 9 THEN 3
 END
Run Code Online (Sandbox Code Playgroud)

当然,这打破并说

"PGError:错误:对于SELECT DISTINCT,ORDER BY表达式必须出现在选择列表中"

有没有办法按照IN子句中的值的顺序在PostgreSQL中排序查询结果?

mysql arrays postgresql

5
推荐指数
1
解决办法
3164
查看次数

如何按外部值对 Django QuerySet 进行排序?

我有一个由 (id, rank) 对组成的字典。我想对 id 执行 Django 查询,以便结果查询集按排名(降序)排序。

获取查询集很容易:

rankings = {...}
result = MyModel.objects.filter(id__in=rankings.keys())
Run Code Online (Sandbox Code Playgroud)

似乎答案应该涉及某种注释,我可以将其用作 order_by 的一部分,但我不知道如何到达那里。

编辑:我忽略了我需要结果是一个 QuerySet,因为这是一个美味 API 管道的一部分。

django django-queryset

5
推荐指数
2
解决办法
3211
查看次数

自定义SQL排序依据

使用:用户搜索部分邮政编码,例如"RG20",然后按特定顺序显示.该查询在布尔模式下使用MATCH AGAINST方法,其中数据库中的邮政编码示例为"RG20 7TT",因此它能够找到它.同时,它还匹配其半径中的其他邮政编码列表(这是一个单独的查询).

我似乎无法通过部分匹配找到订购方式,例如:

ORDER BY FIELD(postcode, 'RG20', 'RG14', 'RG18','RG17','RG28','OX12','OX11') 
      DESC, city DESC
Run Code Online (Sandbox Code Playgroud)

因为它不是专门寻找RG20 7TT,我认为它不能进行部分匹配.

我已经尝试了SUBSTR(邮政编码,-4)并向左和向右看,但我没有使用'by field'取得任何成功,也找不到另一条路线......对不起,这有点长啰嗦,但我'我有点绑定.英国邮政编码分为两部分,最后一部分总是3个字符,在我的数据库中,两者之间有一个空格,如果这有帮助的话.

虽然在邮政编码之后有一个DESC,我确实需要它们以特定的顺序显示(RG20,RG14然后是RG18等).我不确定指定降序是否会删除顺序

sql postgresql sql-order-by postal-code

4
推荐指数
2
解决办法
8089
查看次数

在django中使用ORDER BY FIELD(名称,'Apple','Banana')

我想在Django中使用ORDER BY FIELD()(MySQL).Django支持吗?

所以在MySQL中它看起来像:

SELECT * FROM fruit 
ORDER BY FIELD(name, 'Banana', 'Apple', 'Pear', 'Orange'), variety;
Run Code Online (Sandbox Code Playgroud)

我想在django ORM中使用它.我怎样才能做到这一点.我可以这样做吗order_by()?或以extra()某种方式使用.

不这样工作:

Fruit.objects.all().extra(order_by="FIELD(name, 'Banana', 'Apple', 'Pear', 'Orange')")

django

2
推荐指数
1
解决办法
2026
查看次数

使用Rails Active Record在IN列表中Postgres ORDER BY值

我收到按"收入"排序的UserIds列表(一次大约1000个).我在"我的系统数据库"中有用户记录,但"收入"列不存在.我想从列表中收到的排序顺序中的"我的系统数据库"中检索用户.我尝试使用Active Record执行以下操作,期望以与排序列表中相同的顺序检索记录,但它不起作用.

//PSEUDO CODE
User.all(:conditions => {:id => [SORTED LIST]})
Run Code Online (Sandbox Code Playgroud)

我在下面的链接中找到了类似问题的答案,但我不确定如何使用Active Record实现建议的解决方案.

按IN值列表排序

还有其他办法吗?

请指导.

Shardul.

postgresql activerecord ruby-on-rails sql-order-by in-clause

2
推荐指数
1
解决办法
1797
查看次数

Rails 4 - 按翻译/本地化的顺序排序

我有一个itemstype列调用的表.此列可以具有以下值之一:

rock
paper
scissor
Run Code Online (Sandbox Code Playgroud)

在我的翻译文件中:

en: 
  rock: Stone
  paper: Wood
  scissor: Weapon
Run Code Online (Sandbox Code Playgroud)

如何使用ActiveRecord获取结果并按翻译后的值对其进行排序?

显然,如果我这样做,Item.where(something: true).order('name asc')我会得到数据库(rock)内的值而不是翻译的值(Stone)的结果.

我知道一些r​​uby方法,比如sort_bysort订购带有ruby的项目,但我想在性能原因下在ActiveRecord中订购结果.

ruby postgresql activerecord localization ruby-on-rails

2
推荐指数
1
解决办法
160
查看次数

从数据库按字符串名称排序

我将字符串变量存储在数据库中,"Abstain","Block","No"或"Yes".目前我正在使用一个ORDER BY position,而不是字母顺序,我想命令他们像:'阻止','不','弃权','是'.在Rails中有一个简单的方法吗?

我的确切代码是:

def self.unique_votes(motion)
  Vote.find_by_sql("SELECT * FROM votes a WHERE created_at = (SELECT MAX(created_at) as created_at FROM votes b WHERE a.user_id = b.user_id AND motion_id = #{motion.id}) ORDER BY a.position")
end
Run Code Online (Sandbox Code Playgroud)

注意:我正在使用Postgres SQL,我正在寻找一个可以在select语句中使用的解决方案谢谢!

ruby sql postgresql ruby-on-rails

1
推荐指数
1
解决办法
930
查看次数

按asc或desc以外的自定义顺序对Laravel Collection进行排序

我有这个数组作为Laravel Collection:

"data": [
  {
    "id": 863368,
    "reference": "Ref 1",
    "status": 1
  },
  {
    "id": 863391,
    "reference": "Ref 2",
    "status": 2
  },
  {
    "id": 863390,
    "reference": "Ref 3",
    "status": 2
  },
  {
    "id": 863396,
    "reference": "Ref 4",
    "status": 3
  }
];
Run Code Online (Sandbox Code Playgroud)

我需要按status而不是按asc或对其进行排序desc,但是具有状态的记录2应首先在列表上,然后是状态,1然后是状态3

我不知道如何实现这一目标,在此先感谢您。

php laravel laravel-5

1
推荐指数
1
解决办法
263
查看次数