Postgresql 从EXTO数据库获取随机记录
是否可以仅使用纯EXTO查询而不在应用程序端从数据库中获取10条随机记录?例如,我不想从数据库中获取所有记录,然后在Elixir中从这些记录中获取随机值(如下所示):Postgresql 从EXTO数据库获取随机记录,postgresql,elixir,ecto,Postgresql,Elixir,Ecto,是否可以仅使用纯EXTO查询而不在应用程序端从数据库中获取10条随机记录?例如,我不想从数据库中获取所有记录,然后在Elixir中从这些记录中获取随机值(如下所示): Ecto不提供用于检索记录的通用random函数,因为底层数据库/模式可以(并且确实)以非常不同的方式实现它 但如果您知道要处理的是什么数据库,就可以使用并实现这一点。对于,您可以将它们与函数一起使用: 查询= 来自订阅者, order_by:fragment(“RANDOM()”), 限额:10 全部回购(查询) 这相当于调
Ecto不提供用于检索记录的通用
random
函数,因为底层数据库/模式可以(并且确实)以非常不同的方式实现它
但如果您知道要处理的是什么数据库,就可以使用并实现这一点。对于,您可以将它们与函数一起使用:
查询=
来自订阅者,
order_by:fragment(“RANDOM()”),
限额:10
全部回购(查询)
这相当于调用此
sql
查询:
从订阅服务器中选择*按随机顺序()限制10
我发现这个问题是为了弄清楚如何抓取一条具有nil parent_task属性的随机记录
我想我会发布我的解决方案,以防它对任何人都有帮助
解决方案1
如果有人知道如何避免做列表。首先,也只能使用外星查询,我将感谢您的评论
query =
from t in Subscriber,
where: is_nil(t.parent_task),
order_by: fragment("RANDOM()"),
limit: 1
Repo.all(query) |> List.first
解决方案2
(记得先调用
import-exto.Query
)
query =
from t in Subscriber,
where: is_nil(t.parent_task),
order_by: fragment("RANDOM()"),
limit: 1
Repo.all(query) |> List.first
Repo.all(Subscriber) |> Enum.filter(fn x -> is_nil(x.parent_task) end) |> Enum.random()