PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Połącz zapytania z zagnieżdżoną pętlą z wynikiem tablicy nadrzędnej — pg-promise

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

Zobacz także to pytanie:pobierz tabelę JOIN jako tablicę wyników za pomocą PostgreSQL/NodeJS.

AKTUALIZUJ

Jeśli nie chcesz iść na całość z podejściem zapytania JSON, poniższe skalowanie będzie znacznie lepsze niż w przypadku oryginalnego rozwiązania, ponieważ łączymy wszystkie zapytania podrzędne, a następnie wykonujemy je jako jedno zapytanie:

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

Zobacz API:

  • pomocnicy.concat
  • Baza danych.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. Metoda org.postgresql.jdbc4.Jdbc4Connection.isValid(int) nie została jeszcze zaimplementowana

  2. Zwracanie wartości nienumerycznych z kolumny bazy danych PostgreSQL

  3. Porównanie wydajności i cen PostgreSQL DigitalOcean — ScaleGrid i zarządzane bazy danych DigitalOcean

  4. Uporządkowana liczba kolejnych powtórzeń/duplikatów

  5. Wskazówki i porady dotyczące poruszania się po społeczności PostgreSQL