phoenix-framework - Ecto 模型 - 选择中的子查询

标签 phoenix-framework ecto

我需要使用 Ecto 进行此 SQL 查询:

SELECT users.*, (select count(0) from money_transactions where from_id = users.id AND created_at > '2016-1-25 0:00:00.000000') as money_transactions_today_db FROM "users" WHERE "users"."client_token" = '123'

我尝试做这样的事情,但它不起作用:
query = from users in Like4uElixir.User,
        where: users.client_token in ^tokens,
        select: {users, (from money_transactions in Like4uElixir.MoneyTransaction,
                            where: money_transactions.from_id == users.id,
                            select: count(0))}

Ecto 是否支持子查询?如果没有,我该如何执行查询?

最佳答案

您可以使用查询片段:

query = from users in Like4uElixir.User,
        where: users.client_token in ^tokens,
        select: {users, (fragment("(SELECT COUNT(0) FROM money_transactions
                                    WHERE money_transactions.from_id == ?)", users.id))}

尽管在这种情况下,查询也可以使用常规连接和 group_by 编写。当前对 Ecto 中子查询的支持是有限的。

关于phoenix-framework - Ecto 模型 - 选择中的子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35000859/

相关文章:

elixir - 无法通过监护人获取当前用户

elixir - Phoenix : Trying to connect to Channel but getting a not Route found for GET/websocket error

Elixir phoenix 设置 websocket 响应头

elixir - Ecto 关系,不插入外键 ID

elixir - 如何使用ecto获取上周的记录

elixir - 自动更新父记录updated_at字段(Elixir-Ecto)

websocket - 无法连接到 Phoenix 的网络套接字 : Ignoring unmatched topic. 但我认为它匹配

elixir - 动态选择要在 elixir ecto 中更新的字段

elixir - ectocast_assoc 查找或创建

postgresql - 适配器 Ecto.Adapters.Postgres 未编译