mysql - 从两个单独的列表创建 erlang 记录

标签 mysql erlang

在我们的一个 erlang 项目中,我们使用 mysql-otp 从 mysql 数据库加载数据,如下 -

{ok, Columns, Rows} = mysql:query(ConnectionPid, <<"SELECT * FROM credentials WHERE username = ?">>, [Username])

现在,Columns 是包含所有列名称的二进制文件列表,Rows 是记录列表的列表。

例如。

Columns = [<<"id">>, <<"username">>, <<"password">>, <<"is_active">>]
Rows = [[1,"test_user_1", "password", 'Y'], [2, "test_user_2", "password", 'Y']]

现在我们想在加载时将 mysql 记录缓存到 ets 表中。因此,我们需要从上述两个列表中创建记录。

例如。我们有以下记录声明

-record(credentials, {id, username, password, is_active}).

那么如何从上面两个列表ColumnsRows创建credentials记录列表。有什么想法吗?

Edits

我们不能使用list_to_tuple函数,因为Rows列表中的元素数量可能比credentials可变

最佳答案

如果 Rows 中的数据与 [Id,Username,Password,IsActive|_] 中的值始终保持有序一致,并且其他额外值将尾随它们,您不需要 @7stud 在帖子评论中提到的Columns

这是我如何处理列表理解:

Creds = [ #credentials{
                 id=Id,
                 username=Usr,
                 password=Pw,
                 is_active=Act} || [Id,Usr,Pw,Act|_] <- Rows ]

_ 意味着我们会忽略任何可能不适合 credentials 形状的额外值。

关于mysql - 从两个单独的列表创建 erlang 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53249506/

相关文章:

mysql - 我的 JOIN 表的错误消息。错误 1366

emacs - 在 emacs 中使用钢筋?

erlang - 我如何使用 erlang api 解析标准输入?

mysql - 索引需要加快

mysql - MySQL Workbench EER 上的表信息选项卡在哪里?

ssl - 使用 Elixir 和 Erlang ssl 模块获取 SSL 证书

string - 如何使用 erlang os :cmd()? 删除特殊字符/转义序列

erlang - 如何为使用 rebar 运行测试的 common_test 指定配置文件

mysql - 显示每月预订总额的 SQL 查询

mysql - 根据一个查询中的当前行字段选择下一行