PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Kết hợp các truy vấn vòng lặp lồng nhau vào kết quả mảng mẹ - pg-promise

Tôi là tác giả của 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);
    });

Cũng xem câu hỏi này:lấy bảng JOIN dưới dạng mảng kết quả với PostgreSQL / NodeJS.

CẬP NHẬT

Trong trường hợp bạn không muốn sử dụng toàn bộ cách tiếp cận truy vấn JSON, thì giải pháp sau sẽ mở rộng quy mô tốt hơn nhiều so với giải pháp ban đầu, vì chúng tôi nối tất cả các truy vấn con và sau đó thực thi chúng thành một truy vấn:

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

Xem 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. Quay lại phiên bản readline 6.x trong Homebrew để sửa Postgresql?

  2. PostgreSQL:Sáu mảnh không dễ dàng

  3. Làm thế nào để chuyển đổi kiểu jsonb của PostgreSQL 9.4 thành float

  4. Làm thế nào để chọn bằng mệnh đề WITH RECURSIVE

  5. Thuật toán so khớp trong SQL