首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pg-promise -将多个嵌套循环查询组合到父数组结果中

pg-promise -将多个嵌套循环查询组合到父数组结果中
EN

Stack Overflow用户
提问于 2018-07-23 18:19:12
回答 2查看 380关注 0票数 0

我的问题是基于Combine nested loop queries to parent array result - pg-promise的。我有一个类似的场景,但是有多个查询要组合起来才能得到最终结果。下面是我的代码,我试图用它来实现我的需求。但是我无法从第二个查询和主查询中获得结果。我是一个初学者,想知道正确的实现方式。

代码语言:javascript
复制
  db.task(t => {
    const a = studies => t.any ('SELECT facility_contacts.name, facility_contacts.email, facility_contacts.phone FROM facility_contacts WHERE nct_id = $1', studies.nct_id).then(facility_contacts => {
    studies.facility_contacts = facility_contacts;
    return studies
      });
    const b = studies => t.any ('SELECT eligibilities.criteria, eligibilities.gender FROM eligibilities WHERE nct_id = $1', studies.nct_id).then(eligibilities => {
    studies.eligibilities = eligibilities;
    return studies;
      });
  return t.map('SELECT studies.nct_id, studies.official_title, studies.phase, facilities.country FROM studies, facilities WHERE facilities.country LIKE \'%Ireland%\' LIMIT 10',[], a, b).then(t.batch);
}).then(studies => {
  console.log(studies);
  res.send(studies);
}).catch(error => {
  console.log(error);
});

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-23 22:43:39

这里有一种可能性:

代码语言:javascript
复制
db.task(t => {
    const a = studies => t.any('SELECT facility_contacts.name, facility_contacts.email, facility_contacts.phone FROM facility_contacts WHERE nct_id = $1', studies.nct_id)
        .then(facility_contacts => {
            studies.facility_contacts = facility_contacts;
            return studies
        });
    const b = studies => t.any('SELECT eligibilities.criteria, eligibilities.gender FROM eligibilities WHERE nct_id = $1', studies.nct_id)
        .then(eligibilities => {
            studies.eligibilities = eligibilities;
            return studies;
        });
    const c = studies => t.batch([a(studies), b(studies)]);
    return t.map('SELECT studies.nct_id, studies.official_title, studies.phase, facilities.country FROM studies, facilities WHERE facilities.country LIKE \'%Ireland%\' LIMIT 10', [], c)
        .then(t.batch);
})
    .then(studies => {
        console.log(studies);
        res.send(studies);
    })
    .catch(error => {
        console.log(error);
    });

可以有许多不同的方法,比如基于JSON的,性能会更好。

票数 1
EN

Stack Overflow用户

发布于 2018-07-23 20:32:02

您可以使用Promise.all来获取所有结果

代码语言:javascript
复制
db.task(t => {
    const queries = [
        t.any('SELECT facility_contacts.name, facility_contacts.email, facility_contacts.phone FROM facility_contacts WHERE nct_id = $1', studies.nct_id),
        t.any('SELECT eligibilities.criteria, eligibilities.gender FROM eligibilities WHERE nct_id = $1', studies.nct_id),
        t.map('SELECT studies.nct_id, studies.official_title, studies.phase, facilities.country FROM studies, facilities WHERE facilities.country LIKE \'%Ireland%\' LIMIT 10', [], a, b)
    ];
    return Promise.all(queries);
}).then((ResultArrayOfQueries) => {
    console.log(ResultArrayOfQueries);
    // Combine as per your requirement
    res.send(ResultArrayOfQueries);
}).catch(error => {
    console.log(error);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51476472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档