【问题标题】:How can i return *array of arrays of objects* from MySQL to Node js server in a query using mysql npm?如何在使用 mysql npm 的查询中将 *array of objects* 从 MySQL 返回到 Node js 服务器?
【发布时间】: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 中从服务器执行此操作,但我想一次调用数据库并将查询的输出作为列表或数组数组。

谢谢!

【问题讨论】:

    标签: mysql arrays arraylist


    【解决方案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 会导致输出丢失,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-08-21
    • 2020-06-20
    • 2015-07-15
    • 2017-10-08
    • 1970-01-01
    • 2021-07-23
    • 2018-11-03
    • 2018-06-04
    相关资源
    最近更新 更多