繁体   English   中英

如何在使用 mysql npm 的查询中将 * 对象数组的数组 * 从 MySQL 返回到 Node js 服务器?

[英]How can i return *array of arrays of objects* from MySQL to Node js server in a query using mysql npm?

我正在使用 phpMyAdmin 数据库 (mariaDB)。 我有两个表:

人(姓名,地址,生日)

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

我希望查询的输出是:

[
[
{ 人名 1, 朋友名 1, 地址 1, 生日 1 },
{ 人名 1, 朋友名 2, 地址 2, 生日 2 } ,
{ 人名 1,朋友名 3,地址 3,生日 3 }
] ,
[
{ 人名 2, 朋友名 4, 地址 4, 生日 4 },
{ 人名 2, 朋友名 5, 地址 5, 生日 5 }
]
]

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

代替:
[
{人名1,朋友名1,地址1,生日1},
{人名2,朋友名5,地址5,生日5},
{人名1,朋友名2,地址2,生日2},
{人名2,朋友名4,地址4,生日4},
{人名1,朋友名3,地址3,生日3}
]

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

谢谢!

您可以使用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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM