Dye*_*517 2 postgresql elixir ecto
是否可以仅使用纯Ecto查询从数据库中获取10个随机记录,而不是在应用程序端?例如,我不想从数据库中获取所有记录,然后在Elixir中获取它们的随机值(如下所示):
Subscribers
|> Repo.all
|> Enum.take_random(10)
Run Code Online (Sandbox Code Playgroud)
Ecto不提供random用于检索记录的通用函数,因为底层数据库/模式可以(并且确实)以非常不同的方式实现它.
但是如果你知道你正在处理什么数据库,你可以使用fragment/1并limit/3实现这一点.对于postgresql,您可以将它们与RANDOM()函数一起使用:
query =
from Subscribers,
order_by: fragment("RANDOM()"),
limit: 10
Repo.all(query)
Run Code Online (Sandbox Code Playgroud)
这相当于调用此sql查询:
SELECT * FROM subscribers ORDER BY RANDOM() LIMIT 10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
457 次 |
| 最近记录: |