Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 存储要按顺序使用的计算列,然后选择_Elixir_Ecto - Fatal编程技术网

Elixir 存储要按顺序使用的计算列,然后选择

Elixir 存储要按顺序使用的计算列,然后选择,elixir,ecto,Elixir,Ecto,所以我在做一个PostGis计算。我有一个用户和一个地点模型。每个都有一个:geom,而Place有一个虚拟的距离字段。我要按距离订购,也要选择它。我让它像这样工作,但我担心它会做两次postgis计算。有更好的方法吗 from( ..., order_by: [asc: st_distance(u.geom, p.geom)], select: %{p | distance: st_distance(u.geom, p.geom)} ) 您可以使用别名重用该计算值,尽管您必须使

所以我在做一个PostGis计算。我有一个用户和一个地点模型。每个都有一个
:geom
,而Place有一个虚拟的
距离
字段。我要按距离订购,也要选择它。我让它像这样工作,但我担心它会做两次postgis计算。有更好的方法吗

from(
  ...,
  order_by: [asc: st_distance(u.geom, p.geom)], 
  select: %{p | distance: st_distance(u.geom, p.geom)}
)

您可以使用别名重用该计算值,尽管您必须使用片段。这不是一种折衷!很好地描述了逻辑

在您的用例中,它将给出如下内容:

from(
  ...,
  order_by: [asc: fragment("distance")], 
  select: %{p | distance: fragment("? AS distance", st_distance(u.geom, p.geom))}
)

你有证据证明它在计算两次吗?我假设Postgresql能够在select@m3characters我没有这方面的证据。我只是好奇是否有更好的方法。但你可能是对的,它看到计算已经完成了,只是使用了它。我只是问,因为你可以做一些测试,看到它需要更多的时间,这可能暗示它可能在做额外的工作?如果是这样的话,也许您可以为select字段使用一个片段并将其别名,然后使用一个片段引用与orderby相同的名称?