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 :

Problème dans requête imbriquée


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    526
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 526
    Par défaut Problème dans requête imbriquée
    Bonjour,

    J'ai deux tables

    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
    CREATE TABLE modules
    (
    NomModule VARCHAR(30) NOT NULL,
    NomFormation VARCHAR(20) NOT NULL,
    DateFormation INT NOT NULL,
    CoeffModule INT NOT NULL,
    NumSemestre VARCHAR(5) NOT NULL,
    PRIMARY KEY(NomModule,NomFormation,DateFormation,NumSemestre),
    FOREIGN KEY (NomFormation,DateFormation) REFERENCES formation(NomFormation,DateFormation)
    );
     
    CREATE TABLE note
    (
    IdEtudiant VARCHAR(20) NOT NULL,
    NomModule VARCHAR(20) NOT NULL,
    NomFormation VARCHAR(20) NOT NULL,
    DateFormation INT NOT NULL,
    NumSemestre VARCHAR(5) NOT NULL,
    PRIMARY KEY(IdEtudiant,NomModule,NomFormation,DateFormation,NumSemestre),
    FOREIGN KEY (IdEtudiant) REFERENCES etudiant(IdEtudiant),
    FOREIGN KEY (NomModule,NomFormation,DateFormation,NumSemestre) REFERENCES modules(NomModule,NomFormation,DateFormation,NumSemestre),
    NoteExam float NOT NULL,
    NoteTp float,
    moy float 
    );
    Ce que je veux faire, c'est récupérer les moyennes de ma table note pour les modules sélectionnés dans mon formulaire.

    Voilà la requête que j'ai réalisé. J'ai un problème de syntaxe mais je ne vois pas où.
    Si quelqu'un voit le problème . Merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sqlnotes = "SELECT moy 
    FROM note 
    WHERE NomModule IN 
     (SELECT NomModule 
      FROM modules 
      WHERE (NomFormation='".$formation."' 
       AND DateFormation='".$annee."' 
       AND NumSemestre='".$semestre."')
     ) AND note.NomModule=modules.NomModule";

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Apparemment, l'expression "AND note.NomModule=modules.NomModule" est inutile
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 76
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    note.NomModule=modules.NomModule";
    Tu appelles la table modules qui n'est declaré que ds la sous requete.
    En development logiciel on appelle ca un soucis de porté de variable. Tu essais d'acceder a une donnée qui n'existe pas au niveau ou tu la demandes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT moy 
    FROM note 
    WHERE NomModule IN 
     (
        SELECT NomModule 
        FROM modules 
        WHERE 
        (
        NomFormation='".$formation."' 
       AND DateFormation='".$annee."' 
       AND NumSemestre='".$semestre."'
        )
    ) 
    AND note.NomModule=modules.NomModule";
    Ajout: NumSemestre est elle vraiment bien une string?

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Ouh là ! Des clés primaires à plusieurs colonnes en VARCHAR + une en DATE, pas optimum ce modèle de données !

    Puisque tout est malheureusement en VARCHAR, il suffit d'interroger directement la table non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT moy
    FROM note
    WHERE NomFormation = '"$formation"'
      AND DateFormation = '"$annee"'
      AND NumSemestre = '"$semestre"'
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    526
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 526
    Par défaut
    D'accord merci.

    En fait ce que je voudrais obtenir comme résultat final, c'est une représentation des données sous la forme :

    IDetudiant NoteMatière1 NoteMatière2 ...
    pour chacun de mes étudiants de la formation

    où NoteMatière1 NoteMatière2 correspondant à ma variable moy de mes différents modules.
    C'est un peu comme une transposition de ma table.

    Mais j'ai du mal à réaliser la requête qui me permettrait de faire ça.

    Si quelqu'un voit comment faire ça.
    Merci d'avance.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Ce que tu cherches à faire est de la cosmétique et n'est pas le boulot du SGBD mais celui du programme utilisateur.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. [Toutes versions] Problème de syntaxe dans requêtes imbriquées
    Par BornToBe dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 25/04/2012, 17h31
  2. problème d'extraction de date dans requêtes imbriquées
    Par tomguiss dans le forum Requêtes
    Réponses: 1
    Dernier message: 29/12/2007, 11h10
  3. [MySQL] problème de requêtes imbriquées
    Par xave dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/01/2007, 13h30
  4. Problème dans requête avec la fonction Right
    Par Mariboo dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 17/08/2006, 10h27
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

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