Ecto не предоставляет общей функции random
для извлечения записей, потому что базовые базы данных / схемы могут ( и ) реализовывать ее различными способами.
Но если вы знаете, с какой базой данных вы имеете дело, вы можете использовать fragment/1
и limit/3
для достижения этой цели. Для postgresql , вы можете использовать их с функцией RANDOM()
:
query =
from Subscribers,
order_by: fragment("RANDOM()"),
limit: 10
Repo.all(query)
Это эквивалентно вызову этого sql
запроса:
SELECT * FROM subscribers ORDER BY RANDOM() LIMIT 10