मैं पीजी-वादा का लेखक हूं;)
con.task(t => {
const a = post => t.any('SELECT * FROM comment WHERE idPost = $1', post.id)
.then(comments => {
post.comments = comments;
return post;
});
return t.map('SELECT *, avatar FROM post, users WHERE user = $1 AND user = alias ORDER BY time DESC LIMIT 10 OFFSET $2', [username, pos], a)
.then(t.batch);
})
.then(posts => {
res.send(posts);
})
.catch(error => {
console.log(error);
});
यह प्रश्न भी देखें:PostgreSQL/NodeJS के साथ परिणामों की सरणी के रूप में जॉइन टेबल प्राप्त करें।
अपडेट करें
यदि आप JSON क्वेरी दृष्टिकोण के साथ सभी तरह से नहीं जाना चाहते हैं, तो निम्नलिखित मूल समाधान की तुलना में बहुत बेहतर होगा, क्योंकि हम सभी बाल प्रश्नों को जोड़ते हैं, और फिर उन्हें एक क्वेरी के रूप में निष्पादित करते हैं:
con.task(async t => {
const posts = await t.any('SELECT *, avatar FROM post, users WHERE user = $1 AND user = alias ORDER BY time DESC LIMIT 10 OFFSET $2', [username, pos]);
const a = post => ({query: 'SELECT * FROM comment WHERE idPost = ${id}', values: post});
const queries = pgp.helpers.concat(posts.map(a));
await t.multi(queries)
.then(comments => {
posts.forEach((p, index) => {
p.comments = comments[index];
});
});
return posts;
})
.then(posts => {
res.send(posts);
})
.catch(error => {
console.log(error);
});
एपीआई देखें:
- helpers.concat
- डेटाबेस.मल्टी