IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Langage SQL Discussion :

Requête qui me pose problème


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut Requête qui me pose problème
    Bonjour à toutes et à tous.
    Base de données : postgresql
    J'essaie de programmer un forum élémentaire, pour un club de sport.
    Il y a trois tables dont voici la description :
    Table t_e_utilisateurs_uti :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      uti_id serial NOT NULL,
      uti_nom character varying(30) NOT NULL,
      uti_mot_de_passe character varying(255) NOT NULL,
      uti_courriel character varying(255) NOT NULL,
      uti_date timestamp without time zone NOT NULL,
      uti_grade integer NOT NULL,
      CONSTRAINT "PK_uti_id" PRIMARY KEY (uti_id )
    Table t_e_sujets_suj :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      suj_id serial NOT NULL,
      uti_id integer NOT NULL,
      suj_titre character varying(255) NOT NULL,
      suj_date date NOT NULL,
      CONSTRAINT "PK_suj_id" PRIMARY KEY (suj_id ),
      CONSTRAINT "FK_uti_id" FOREIGN KEY (uti_id)
          REFERENCES t_e_utilisateurs_uti (uti_id) MATCH SIMPLE
          ON UPDATE NO ACTION ON DELETE NO ACTION
    Table t_e_reponses_rep
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      rep_id serial NOT NULL,
      uti_id integer NOT NULL,
      suj_id integer NOT NULL,
      rep_texte text NOT NULL,
      rep_date date NOT NULL,
      rep_heure time without time zone,
      CONSTRAINT "PK_rep_id" PRIMARY KEY (rep_id ),
      CONSTRAINT "FK_suj_id" FOREIGN KEY (suj_id)
          REFERENCES t_e_sujets_suj (suj_id) MATCH SIMPLE
          ON UPDATE NO ACTION ON DELETE NO ACTION,
      CONSTRAINT "FK_uti_id" FOREIGN KEY (uti_id)
          REFERENCES t_e_utilisateurs_uti (uti_id) MATCH SIMPLE
          ON UPDATE NO ACTION ON DELETE NO ACTION
    Je cherche à obtenir les résultats suivants :
    Titre du sujet; Nombre de réponses; Auteur du sujet; Nom du dernier répondeur; date et heure de la dernière réponse.
    Voici le requête qui me permet d'approcher ce que je demande :
    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
    SELECT 
      t_e_utilisateurs_uti.uti_nom AS "Auteur",
      t_e_sujets_suj.suj_titre AS "Titre",
      MAX(t_e_reponses_rep.rep_date) AS "Date rép",
      MAX(t_e_reponses_rep.rep_heure) AS "Heure rép",
      COUNT(t_e_reponses_rep.rep_id) AS "Nbre rép"
    FROM 
        t_e_reponses_rep,
        t_e_sujets_suj,
        t_e_utilisateurs_uti
    WHERE
        t_e_reponses_rep.suj_id = t_e_sujets_suj.suj_id AND
        t_e_sujets_suj.uti_id = t_e_utilisateurs_uti.uti_id
    GROUP BY
        t_e_sujets_suj.suj_date,
        t_e_sujets_suj.suj_titre,
        t_e_utilisateurs_uti.uti_nom
    ORDER BY
        t_e_sujets_suj.suj_date DESC;
    Voici ce que donne cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    "Sapo";"vtt des Chambarans";"2013-11-09";"16:32:12";1
    "Christesse";"Assemblée Générale";"2013-11-11";"18:42:53";3
    "Miflon";"Gégé le retour";"2013-08-17";"13:02:36";4
    "Lordan";"La Tatoune";"2013-09-07";"14:46:02";2
    Je ne vois pas comment obtenir le nom du répondeur avec cette requête.
    Donc voici mes questions:
    1. Cette requête vous paraît-elle correcte, y a t-il mieux?
    2. Pouvez-vous m'aider à obtenir le nom du dernier répondeur?


    Merci pour vos futures réponses.
    Miflon.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Est-ce que cette requete vous donne ce que vous voulez ?

    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
     
    WITH CTE AS (
      SELECT 
        S.suj_titre AS titre,
        COUNT(*) OVER (PARTITION BY S.suj_id) AS NbReponses,
        Auteur.uti_nom AS Auteur, 
        ROW_NUMBER() OVER(
              PARTITION BY S.suj_id
              ORDER BY R.rep_date DESC, R.rep_heure DESC
          ) AS RangReponse,
        U.uti_Nom AS NomRepondeur
      FROM t_e_sujets_suj S
      INNER JOIN t_e_utilisateurs_uti Auteur
        ON Auteur.uti_id = S.uti_id
      INNER JOIN  t_e_reponses_rep R
        ON R.suj_id = S.suj_id
      INNER JOIN t_e_utilisateurs_uti U
        ON U.uti_id = R.uti_id
     )
    SELECT Titre, NbReponses, Auteur, NomRepondeur
    FROM CTE
    WHERE RangReponse = 1

  3. #3
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    @aieeeuuuuu :
    Merci de ta réponse. Effectivement le nom des derniers utilisateurs ayant répondu au sujet est correct.
    Il me reste à étudier la requête pour bien comprendre son fonctionnement.
    Une fois comprise il me restera à classer les sujets en ordre décroissant de date de création.
    Je marque donc résolu, quitte à me rapprocher de vous si je ne comprends pas bien.

    Merci encore de ton intérêt pour mon problème.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête qui me pose problème (suite)
    Par Miflon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/12/2013, 18h00
  2. Réponses: 1
    Dernier message: 18/02/2008, 20h40
  3. Toggle qui me pose problème
    Par Ben-o dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/10/2007, 09h24
  4. Requête SQL qui me pose problème
    Par CB56 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/02/2007, 16h07
  5. un trait qui me pose problème
    Par barbapapa2 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 22/11/2006, 12h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo