Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

Résultat SQL et création d'un array


Sujet :

NodeJS

  1. #1
    Membre habitué
    Résultat SQL et création d'un array
    Bonjour,

    Je galère avec la logiue de création d'un nouvel array en utilisant le résultat d'un requête SQL utilisant JOIN.
    Je m'explique: J'ai une table (postgresql) qui contient des tickets, et un table qui contient des commentaires et une foreign key por la référence vers le ticket_id.

    Quand je fais ma requête pour récupérer pour chaque ticket la liste de ses commentaires, la requête me renvoi autant de ligne qu'il y a de commentaires (normal quoi ...).
    Je voudrai maintenant créer un objet qui remets tous les commentaire dans l'objet du ticket:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    [
      {
        ticket_id: '84236fa6-3895-461e-a769-8e06ff254142',
        description: 'test 1',
        content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut \r\n' +
          '\r\n' +
          'labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris ni\r\n' +
          'si ut aliquip ex ea commodo consequat. Duis aute \r\n' +
          '\r\n' +
          'irure dolor in reprehenderit in voluptate velit esse cillum dolore e',
        status: 'open',
        open_by: 'toto',
        created_at: 2019-11-21T20:28:30.720Z,
        updated_at: 2019-11-21T20:28:30.720Z,
        comments: [
          {
             comment_id: '98accc55-7a4b-46fc-b583-f11410305d6c',
             by: 'tata',
             created_at: 2019-11-21T20:29:52.113Z,
             updated_at: 2019-11-21T20:29:52.113Z
          }
      }
    ]


    Voilà le résultat brut de ma requête:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    [
      {
        ticket_id: '84236fa6-3895-461e-a769-8e06ff254142',
        description: 'test 1',
        content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut \r\n' +
          '\r\n' +
          'labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris ni\r\n' +
          'si ut aliquip ex ea commodo consequat. Duis aute \r\n' +
          '\r\n' +
          'irure dolor in reprehenderit in voluptate velit esse cillum dolore e',
        status: 'open',
        open_by: 'toto',
        created_at: 2019-11-21T20:28:30.720Z,
        updated_at: 2019-11-21T20:28:30.720Z,
        comment_id: '98accc55-7a4b-46fc-b583-f11410305d6c',
        comment_by: 'tata',
        comment_created_at: 2019-11-21T20:29:52.113Z,
        comment_updated_at: 2019-11-21T20:29:52.113Z
      },
      {
        ticket_id: '84236fa6-3895-461e-a769-8e06ff254142',
        description: 'test 1',
        content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut \r\n' +
          '\r\n' +
          'labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris ni\r\n' +
          'si ut aliquip ex ea commodo consequat. Duis aute \r\n' +
          '\r\n' +
          'irure dolor in reprehenderit in voluptate velit esse cillum dolore e',
        status: 'open',
        open_by: 'toto',
        created_at: 2019-11-21T20:28:30.720Z,
        updated_at: 2019-11-21T20:28:30.720Z,
        comment_id: '48066de0-3a5b-4666-96c8-212e93ab05c3',
        comment_by: 'titi',
        comment_created_at: 2019-11-21T20:29:20.031Z,
        comment_updated_at: 2019-11-21T20:29:20.031Z
      }
    ]


    Bon oui je sais que je pourrai juste aller chercher les commentaires avec une seconde requête en faisant une boucle sur la liste des tickets, mais ça oblige à faire des requêtes en plus et donc de charger encore plus la database.
    Je ne suis pas un grand développeur, mais j'essaie de m'en sortir comme je peux alors si une bonne âme peut m'aider sur ce coup ...

    Merci.

  2. #2
    Modérateur

    Bonjour,
    Remarque : la coloration syntaxique montre que le format de tes dates est incorrect
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    created_at: 2019-11-21T20:28:30.720Z,
    updated_at: 2019-11-21T20:28:30.720Z,

    il devrait y avoir des quottes encadrantes
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    created_at: "2019-11-21T20:28:30.720Z",
    updated_at: "2019-11-21T20:28:30.720Z",


    Je voudrai maintenant créer un objet qui remets tous les commentaire dans l'objet du ticket:
    pas trop compris la signification, peut être une boucle !
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    dataRetour.forEach((el) => {
      // on fait ce que l'on veut avec el.content et le reste d'ailleurs !
    });