如何在使用 mysql npm 的查询中将 *array of objects* 从 MySQL 返回到 Node js 服务器?

Posted

技术标签:

【中文标题】如何在使用 mysql npm 的查询中将 *array of objects* 从 MySQL 返回到 Node js 服务器?【英文标题】:How can i return *array of arrays of objects* from MySQL to Node js server in a query using mysql npm? 【发布时间】:2021-12-16 01:44:26 【问题描述】:

我正在使用 phpMyAdmin 数据库 (mariaDB)。我有两张桌子:

人物(姓名、地址、生日) 和 朋友(friendName、personName、生日)。 我的查询:SELECT * FROM person, friends WHERE person.Name=friends.personName ; 我希望服务器将数据库中任何人的所有朋友作为对象数组

我希望查询的输出是:

[ 
[  personName1, friendName1, Address1, Birthday1 ,
 personName1, friendName2, Address2, Birthday2  , 
 personName1, friendName3, Address3, Birthday3  ], 
[  personName2, friendName4, Address4, Birthday4 ,
 personName2, friendName5, Address5, Birthday5 ]
] 

类似于对象数组的数组。 数组(也是数组)中的每个器官都包含对象。 根据 personName 值在数组中划分对象。

代替:

[ 
personName1, friendName1, Address1, Birthday1, 
personName2, friendName5, Address5, Birthday5,
personName1, friendName2, Address2, Birthday2, 
personName2, friendName4, Address4, Birthday4, 
personName1, friendName3, Address3, Birthday3 
] 

我知道我可以在 javascript 中从服务器执行此操作,但我想一次调用数据库并将查询的输出作为列表或数组数组。 谢谢!

【问题讨论】:

【参考方案1】:

您可以使用Array.reduce 将结果(数组数组)分组到对象数组中。

const initialResult = fakeResult();
const grouped = initialResult
  .reduce((acc, [name, friend, address, birthday]) => [...acc, 
    [name]: 
      friend,
      address,
      birthday
    
  ], []);

document.querySelector(`pre`).textContent = JSON.stringify(grouped, null, 2);

function fakeResult() 
  return `personName1,friendName1,Address1,Birthday1
      personName1,friendName2,Address2,Birthday2
      personName2,friendName3,Address3,Birthday3
      personName2,friendName4,Address4,Birthday4`
    .split(`\n`)
    .map(l => l.trim().split(`,`));
<pre></pre>

如果您只追求 SQL,group_concat 可能是个主意。

SELECT 
  p.Name 
  , group_concat(
     f.personName, ', ', 
     f.Address, ', ', 
     f.Birthday) as friends
 FROM person p , friends f
 WHERE 1 = 1 
  AND p.Name = f.personName;

【讨论】:

嗨!谢谢你们的快速响应。请注意,我编辑了我的问题。另外,我想找到一种方法来使用 sql 查询而不是使用 javascript。再次感谢:) 在这种情况下,不要使用标签javascriptArrayArrays 作为查询恕我直言无法使用 SQL,但您当然可以使用 order by person.name 之类的东西。 按 person.name 使用 order 会导致输出丢失,谢谢!

以上是关于如何在使用 mysql npm 的查询中将 *array of objects* 从 MySQL 返回到 Node js 服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在mysql中将单行插入查询重构为多行插入查询?

如何在 PHP/MYSQL 中将两个 mysql 查询作为一个执行?

如何在php中将div值传递给mysql查询[关闭]

如何在 MYSQL 查询中将“LIKE”与“IN”结合起来?

如何在node.js中将mysql查询的结果输出为json文件

如何从 MySQL 查询中将 json 返回到 GraphQL?