PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 27/03/2016 20:03:42

kylianMartins
Membre

SELECT sur une seule ligne au lieu de 2

Bonjour,


Je vais vous exposer mon problème.
J'ai pour le besoin d'un projet étudiant de créer un site dynamique.
Bien qu'étant novice, mon choix s'est porté sur un site qui "référencerait" les différents films, musiques et jeux selon différents critères.
Pour le moment, j'ai crée une base de données uniquement relatives au film.
J'ai ainsi une table film (idfilm, titre, #anneesortie), une table genre (idgenre, genre), une table année (idannée, année) et une table film_genre qui relie les films au(x) genre(s) étant donné qu'un film peut avoir plusieurs genres (id, #film, #genre).
J'ai sur une mes pages web une requête qui affiche tous les films avec les années de sortie selon ce format :


titre du film            ANNEE


J'aimerai pouvoir afficher également le (ou les) genre(s) de chaque film de cette sorte :


titre du film            ANNEE           GENRE1, GENRE2, GENRE3


J'effectue alors cette requête :


SELECT
  tabannee.annee,
  tabfilm.titre,
  tabgenre.genre
FROM
  public.tab_film_genre,
  public.tabannee,
  public.tabfilm,
  public.tabgenre
WHERE
  tab_film_genre.film = tabfilm.idfilm AND
  tabfilm.anneesortie = tabannee.idannee AND
  tabgenre.idgenre = tab_film_genre.genre
ORDER BY
  tabfilm.titre;


Cependant, avec cette requête, si le film a plusieurs genres, le film est affichée sur plusieurs lignes avec les différents genre de cette sorte :


titre du film            ANNEE           GENRE1
titre du film            ANNEE           GENRE2

J'aimerai donc savoir qu'est ce que je dois rajouter dans ma requête.
Cordialement.

Hors ligne

#2 27/03/2016 21:00:45

rjuju
Administrateur

Re : SELECT sur une seule ligne au lieu de 2

Bonjour,


ce que vous devez ajouter dans la requête pour ? Avoir un tableau des genres, concaténer les genres, ... ?

Hors ligne

#3 27/03/2016 21:38:25

kylianMartins
Membre

Re : SELECT sur une seule ligne au lieu de 2

Bonjour, et merci pour cette réponse rapide,
Pour répondre à votre question, c'est pour obtenir le résultat :


titre du film            ANNEE           GENRE1, GENRE2, GENRE3


et non plus celui là :


titre du film            ANNEE           GENRE1
titre du film            ANNEE           GENRE2

Donc, en bref, pour concaténer les genres, oui.

Dernière modification par kylianMartins (27/03/2016 21:39:33)

Hors ligne

#4 27/03/2016 21:51:10

rjuju
Administrateur

Re : SELECT sur une seule ligne au lieu de 2

Il vous faut utiliser l'aggrégat string_agg, exemple :

SELECT
  tabannee.annee,
  tabfilm.titre,
  string_agg(tabgenre.genre, ', ')
FROM
  public.tab_film_genre,
  public.tabannee,
  public.tabfilm,
  public.tabgenre
WHERE
  tab_film_genre.film = tabfilm.idfilm AND
  tabfilm.anneesortie = tabannee.idannee AND
  tabgenre.idgenre = tab_film_genre.genre
GROUP BY
  tabannee.annee, tabfilm.titre
ORDER BY
  tabfilm.titre;

Hors ligne

#5 27/03/2016 22:54:57

kylianMartins
Membre

Re : SELECT sur une seule ligne au lieu de 2

Merci, j'ai utilisé string_agg comme vous me l'avez dit et ça marche parfaitement.
Merci beaucoup pour la rapidité et l'efficacité de votre réponse.

Hors ligne

Pied de page des forums