PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Gabungkan kueri loop bersarang ke hasil larik induk - pg-promise

Saya penulis pg-promise;)

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);
    });

Lihat juga pertanyaan ini:dapatkan tabel GABUNG sebagai larik hasil dengan PostgreSQL/NodeJS.

PERBARUI

Jika Anda tidak ingin sepenuhnya menggunakan pendekatan kueri JSON, berikut ini akan menskalakan jauh lebih baik daripada solusi aslinya, karena kami menggabungkan semua kueri anak, lalu menjalankannya sebagai satu kueri:

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);
    });

Lihat API:

  • helpers.concat
  • Database.multi


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL 11 - Prosedur

  2. PostgreSQL meneruskan data dari CTE rekursif ke fungsi

  3. PostgreSQL:Hapus atribut dari kolom JSON

  4. PostgreSQL - jumlah maksimum parameter dalam klausa IN?

  5. Bagaimana cara menulis DataFrame ke tabel postgres?