如何在使用 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。再次感谢:) 在这种情况下,不要使用标签javascript
。 Array
或 Arrays
作为查询恕我直言无法使用 SQL,但您当然可以使用 order by person.name
之类的东西。
按 person.name 使用 order 会导致输出丢失,谢谢!以上是关于如何在使用 mysql npm 的查询中将 *array of objects* 从 MySQL 返回到 Node js 服务器?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PHP/MYSQL 中将两个 mysql 查询作为一个执行?
如何在 MYSQL 查询中将“LIKE”与“IN”结合起来?