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

PHP & Base de données Discussion :

Probléme avec une requete SQL [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 50
    Points : 31
    Points
    31
    Par défaut Probléme avec une requete SQL
    Bonjour tout le monde .
    Je suis entrain de développer une application PHP/MySql pour gérer un établissement d'enseignement . Le But de ce bout de code est d'afficher un ensemble d'information apres avoir saisie des données dans un formulaire genre . Le ré&sultat est bien retournée sauf que chaque entrée est répétée 13 fois !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $sql=("SELECT DISTINCT * from modules , formateurs WHERE (((modules.filiere)='".$_POST['nfiliere']."') AND ((modules.groupe)='".$_POST['ngroupe']."') AND ((modules.niveau)='".$_POST['nniveau']."') AND ((formateurs.id)=(modules.formateurs))   ) Order by nommodule ;");
    $res = mysql_query($sql);
    while ( $resultat = mysql_fetch_array($res))
    {
      ?>
        <tr>
        <td><div align="center"><?php echo $resultat['numeromodule']; ?></div></td>
        <td><div align="left"><?php echo $resultat['nommodule']; ?></div></td>
    	<td><div align="center"><?php echo $resultat['nbr']; ?></div></td>
        <td><div align="center"><?php echo $resultat['formateurs'] ; ?></div></td>
    	  <td><div align="center"><?php echo $resultat['nom'] ; ?>  <?php echo $resultat['prenom'] ; ?></div></td>
        </tr>
      <?php
    Merci de votre aide .

  2. #2
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    faut optimisé ta requête en utilisant des jointures :
    http://sqlpro.developpez.com/cours/sqlaz/jointures/

  3. #3
    Membre éclairé Avatar de EIN-LESER
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 703
    Points : 778
    Points
    778
    Par défaut
    Dans l'absolut on doit toujours echo une requête concaténé pour la tester directement dans mysql quand on a un doute sur le résultat.

    Mais redoran a raison. Les jointures sont très importantes.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    Merci de vos réponses.
    Je pense que j'ai bien utilisé la jointure entre les deux tables ( modules , formateurs ) mais je ne vois pas toujours pourquoi on me retourne le résultat dupliqué .. je vais encore creuser

  5. #5
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    faut éviter les ********
    je vois pas la jointure avec la table authentification

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    Désolé c'est de ma faute la table authentification n'a rien à faire ici . Je l'ai éliminé.

  7. #7
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Petite question, tu as combien de champs dans modules, dans formateurs et aussi dans authentification (celle que tu avais mis en trop dans ta première requête) ?

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    la table module contient 9 champs.
    la table formateur contient 15 champs mais je ne m’intéresse ici qu'à deux : nom et prenom.
    Pour l'authentification je l'ai éliminé mais le problème de duplication persiste toujours.

  9. #9
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Je me posais la question si cela ne venait pas du distinct car je sais pas ce que sql comprend lorsque tu mets SELECT * DISTINCT

    Mets à la place du * le nom des champs que tu as besoin (j'en vois six) et le distint portant sur 1 champ qui devrait être numeromodule non, ?

  10. #10
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    Puis je voir un exemple de cette requette ? ou faut -il mettre le distinct ?

  11. #11
    Expert éminent sénior

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Points : 19 373
    Points
    19 373
    Par défaut
    Hello,

    Juste comme ça au passage, un DISTINCT porte sur la ligne de résultat, et non pas un seul champ

  12. #12
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 50
    Points : 31
    Points
    31
    Par défaut
    ça ne marche toujours pas .Voici un aperçu du résultat (j'ai omi le champ nom et prenom des formateurs et j'ai ajouté un champs coefficient )
    Images attachées Images attachées  

  13. #13
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Salut à toi firePrawn, tu peut faire un distinct sur un champ pour éviter les doublons genre: SELECT DISTINCT prenom FROM utilisateur pour donner tous les prenoms différents des utilisateurs.

    Donc sur un champ oui, sur un couple de résultat oui, sur une tierce etc etc bref tu as raison sur le résultat de la requête ... et de mauvaise foi je dirais que j'avais raison mais pour le problème ça serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCT LesSixChamps  from modules , formateurs WHERE ...

  14. #14
    Expert éminent sénior

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Points : 19 373
    Points
    19 373
    Par défaut
    Évidemment dans ton exemple la ligne de résultat ne comporte qu'un seul champ

    En revanche SELECT DISTINCT prenom, nom from COMPTE ne fera pas un DISTINCT sur le champ prenom mais bien sur le couple prenom et nom

  15. #15
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Ah j'suis déçu, tu as pas bien tout lu dans mon post précédent, sur un champ, deux champs, trois ... etc donc sur la ligne du résultat (Donc oui tu as raison mais j'ai essayé de me rattrapper).

    Par contre, il y a résolu mais on sait pas comment en fait

  16. #16
    Expert éminent sénior

    Avatar de FirePrawn
    Homme Profil pro
    Consultant technique
    Inscrit en
    Mars 2011
    Messages
    3 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique

    Informations forums :
    Inscription : Mars 2011
    Messages : 3 179
    Points : 19 373
    Points
    19 373
    Par défaut
    Au temps pour moi
    Il était tôt, pas encore bu le café tout ça

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

Discussions similaires

  1. Problème avec une requete sql
    Par Latimer dans le forum SQL
    Réponses: 2
    Dernier message: 18/05/2015, 12h02
  2. Problème avec une requete SQL
    Par youce90 dans le forum Bases de données
    Réponses: 7
    Dernier message: 12/08/2012, 15h10
  3. problème avec une requete sql
    Par crmien dans le forum Requêtes
    Réponses: 3
    Dernier message: 04/03/2010, 09h57
  4. Problème avec une requete SQL sous access
    Par Luther13 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 14/12/2005, 11h39
  5. [ORACLE][SQL] procedure sous delphi avec une requete SQL
    Par nivet dans le forum Bases de données
    Réponses: 2
    Dernier message: 17/11/2004, 14h43

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