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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/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
Postgresql 从EXTO数据库获取随机记录_Postgresql_Elixir_Ecto - Fatal编程技术网

Postgresql 从EXTO数据库获取随机记录

Postgresql 从EXTO数据库获取随机记录,postgresql,elixir,ecto,Postgresql,Elixir,Ecto,是否可以仅使用纯EXTO查询而不在应用程序端从数据库中获取10条随机记录?例如,我不想从数据库中获取所有记录,然后在Elixir中从这些记录中获取随机值(如下所示): Ecto不提供用于检索记录的通用random函数,因为底层数据库/模式可以(并且确实)以非常不同的方式实现它 但如果您知道要处理的是什么数据库,就可以使用并实现这一点。对于,您可以将它们与函数一起使用: 查询= 来自订阅者, order_by:fragment(“RANDOM()”), 限额:10 全部回购(查询) 这相当于调

是否可以仅使用纯EXTO查询而不在应用程序端从数据库中获取10条随机记录?例如,我不想从数据库中获取所有记录,然后在Elixir中从这些记录中获取随机值(如下所示):


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()