gpt4 book ai didi

mysql - 使用 Elixir - Ecto 进行复杂查询

转载 作者:太空宇宙 更新时间:2023-11-03 11:38:14 25 4
gpt4 key购买 nike

所以我正在将节点应用程序转换为 Elixir,并且有一些我想使用 Ecto 的查询,但我还没有找到可行的方法,并且如果可能的话我想避免连接字符串和参数.

我有大约 10 个查询链接在一个交易中,看起来有点像这样:

INSERT INTO user_servers(user_id, server_id, server_type_code,      position,                 active_flag,   create_date,      created_by)
SELECT ?, ?, 'SERVER', (COALESCE(MAX(position), 0) + 1), 'Y', CURRENT_TIMESTAMP, ?
FROM user_servers WHERE server_type_code = 'SERVER' and user_id = ?;

这是在交易中。

所以我的第一个问题是,因为我真的很难在 ecto 中找出正确的组合来完成这个查询。

我如何在 Ecto 中执行带有 SELECT 子句的 INSERT 并能够用硬编码项替换问号。

我正在使用 snowflake 创建 ID,因此将在服务器端创建这些 ID 并发送它们。

我的下一个问题是,如何将 Repo.transaction 与 multi.new 与 Raw SQL 一起使用。

最佳答案

我相信您会想要使用原始的 query/4应用程序接口(interface)。这将允许您编写自定义查询并获得无需转义输入的好处。像下面这样的东西应该可以工作。

raw_query = "INSERT INTO user_servers(user_id, server_id, server_type_code, position, active_flag, create_date, created_by)
SELECT $1, $2, 'SERVER', (COALESCE(MAX(position), 0) + 1), 'Y', CURRENT_TIMESTAMP, $3
FROM user_servers WHERE server_type_code = 'SERVER' and user_id = $4;"

Ecto.Adapters.SQL.query(MyRepo, raw_query, [value1, value2, value3, value4])

关于mysql - 使用 Elixir - Ecto 进行复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43947116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com