栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用PostgreSQL / NodeJS获取JOIN表作为结果数组

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用PostgreSQL / NodeJS获取JOIN表作为结果数组

使用pg-promise很容易做到:

function buildTree(t) {    const v = q => t.any('SELECt id, value FROM votes WHERe question_id = $1', q.id)        .then(votes => { q.votes = votes; return q;        });    return t.map('SELECt * FROM questions', [], v).then(t.batch);}db.task(buildTree)    .then(data => {        console.log(data); // your data tree    })    .catch(error => {        console.log(error);    });

API:map,any,task,batch


相关问题:

  • 用pg-promise获得父母和孩子的树
  • pg-promise的条件任务

而且,如果您只想使用一个查询,那么使用PostgreSQL 9.4和更高版本的语法,您可以执行以下操作:

SELECt json_build_object('id', q.id, 'content', q.content, 'votes',    (SELECT json_agg(json_build_object('id', v.id, 'value', v.value))     FROM votes v WHERe q.id = v.question_id))FROM questions q

然后,您的pg-promise示例将是:

const query =    `SELECt json_build_object('id', q.id, 'content', q.content, 'votes',        (SELECT json_agg(json_build_object('id', v.id, 'value', v.value))         FROM votes v WHERe q.id = v.question_id)) json    FROM questions q`;db.map(query, [], a => a.json)    .then(data => {        console.log(data); // your data tree    })    .catch(error => {        console.log(error);    });

而且,您肯定希望将这样复杂的查询保留在外部SQL文件中。请参阅查询文件。

结论

上面介绍的两种方法之间的选择应基于您的应用程序的性能要求:

  • 单查询方法速度更快,但是有点冗长,但难以读取或扩展
  • 多查询方法更易于理解和扩展,但由于执行的查询数量动态,因此性能不佳。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/382969.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号