PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

नेस्टेड लूप प्रश्नों को पैरेंट सरणी परिणाम में संयोजित करें - स्नातकोत्तर-वादा

मैं पीजी-वादा का लेखक हूं;)

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
  • डेटाबेस.मल्टी


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. तार्किक प्रतिकृति समाधानों की प्रदर्शन सीमाएँ

  2. पोस्टग्रेज ज्यामिति प्रारूप को WKT . में बदलें

  3. पूरे पन्ने के प्रभाव पर लिखता है

  4. PostgreSQL हिम्मत:"रेसजंक" क्या है?

  5. Pgbackrest डेल्टा को पुनर्स्थापित करें और पुनर्स्थापित करें