pg-promise - 将多个嵌套循环查询组合到父数组结果
pg-promise - Combine multiple nested loop queries to parent array result
我的问题是基于。我遇到了类似的情况,但要组合多个查询以获得最终结果。以下是我试图实现我的要求的代码。但是我无法从第二个查询与主查询相结合中获得结果。我是初学者,想知道正确的实现方式。
db.task(t => {
const a = studies => t.any ('SELECT facility_contacts.name, facility_contacts.email, facility_contacts.phone FROM facility_contacts WHERE nct_id = ', 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 = ', 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);
});
提前致谢。
你可以使用Promise.all得到所有结果
db.task(t => {
const queries = [
t.any('SELECT facility_contacts.name, facility_contacts.email, facility_contacts.phone FROM facility_contacts WHERE nct_id = ', studies.nct_id),
t.any('SELECT eligibilities.criteria, eligibilities.gender FROM eligibilities WHERE nct_id = ', 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);
});
这是一种可能性:
db.task(t => {
const a = studies => t.any('SELECT facility_contacts.name, facility_contacts.email, facility_contacts.phone FROM facility_contacts WHERE nct_id = ', 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 = ', 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。
我的问题是基于
db.task(t => {
const a = studies => t.any ('SELECT facility_contacts.name, facility_contacts.email, facility_contacts.phone FROM facility_contacts WHERE nct_id = ', 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 = ', 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);
});
提前致谢。
你可以使用Promise.all得到所有结果
db.task(t => {
const queries = [
t.any('SELECT facility_contacts.name, facility_contacts.email, facility_contacts.phone FROM facility_contacts WHERE nct_id = ', studies.nct_id),
t.any('SELECT eligibilities.criteria, eligibilities.gender FROM eligibilities WHERE nct_id = ', 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);
});
这是一种可能性:
db.task(t => {
const a = studies => t.any('SELECT facility_contacts.name, facility_contacts.email, facility_contacts.phone FROM facility_contacts WHERE nct_id = ', 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 = ', 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。