Получить случайные записи из базы данных Ecto - PullRequest
0 голосов
/ 06 ноября 2018

Можно ли получить 10 случайных записей из базы данных, используя только чистые Ecto-запросы, а не на стороне приложения? Например, я не хочу получать все записи из базы данных, а затем получать из них случайные значения в эликсире (например):

Subscribers
|> Repo.all
|> Enum.take_random(10)

1 Ответ

0 голосов
/ 06 ноября 2018

Ecto не предоставляет общей функции random для извлечения записей, потому что базовые базы данных / схемы могут ( и ) реализовывать ее различными способами.

Но если вы знаете, с какой базой данных вы имеете дело, вы можете использовать fragment/1 и limit/3 для достижения этой цели. Для , вы можете использовать их с функцией RANDOM():

query =
  from Subscribers,
  order_by: fragment("RANDOM()"),
  limit: 10

Repo.all(query)

Это эквивалентно вызову этого sql запроса:

SELECT * FROM subscribers ORDER BY RANDOM() LIMIT 10
...