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

 MySQL Discussion :

Affichage avec jointure


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Mars 2013
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 70
    Par défaut Affichage avec jointure
    bonjour,
    j'ai un sérieux problème avec l'affichage d'un bulletin scolaire que je voudrais afficher.
    j'ai deux tables une table nommée listeleve dans laquelle je mets les informations sur l'élève et l'autre nommée frang dans laquelle je mets les moyennes et le rang dans chaque matière.


    Les données ne s'affichent pas quand je veux afficher les bulletins de tous les élèves dans une classe donnée.
    s'il y a dix matières dans la table frang
    dix foix l'élève s'affiche.
    quand je veux resoudre le problème avec " group by" cette fois c'est une matière qui s'affiche.
    ce que je voudrais c'est qu'un élève avec ses informations s'affiche avec ses matères en dessous et ainsi de suite.

    j'ai tout essayé depuis une semaine environ.cela ne passe.
    voici le code:
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    <table  align="center" width="100%" 
     
    background="images/coi.jpg" class="gtitr"
     width="50%" border="3" bordercolor="#990000"  >
     
    		 <tr align="center">
          <td>  
     
    <?php
    include("configu.php");
    ?>
     
     <?php
     
     
    function classement(){
     
    $results = array();
    $sql = 'SELECT DISTINCT listeleve.nomre,listeleve.prenomsre,listeleve.classere,listeleve.matricule,
    listeleve.avatarre,
    frang.matricule,frang.moyenne,
    frang.matiere,frang.rang,frang.professeur from  
    listeleve,frang where 
    frang.matricule = listeleve.matricule AND 
    listeleve.classere = "'.$_GET['classe'].'"  
    order by nomre,prenomsre 
    ';
    $query = mysql_query($sql) or die("error");
    while($row = mysql_fetch_assoc($query)){
        $results[] = $row;
      }
      return $results;
    }  
     
    ?>
    	<?php
        $classements = classement();
    foreach($classements  as $classement){
    ?>
     
    <?php
        echo '
     
    	<h3>Nom:'.$classement["nomre"].'---
     
     
     
    	 <br> Prénoms:'.$classement['prenomsre'].'
     
     
     
    	<hr/>MATIERE:'.$classement['matiere'].'---MOYENNE:'.$classement['matiere'].'---
    	rang:'.$classement['matiere'].'';
     
    } 
     
     
    mysql_close();	?>
    merci pour votre sécours car j'en ai besoin.

  2. #2
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    C'est un problème SQL non ? => https://www.developpez.net/forums/f4...donnees/mysql/

    sinon, je pense qu'il serait préférable que tu donne les structures des tables concernées ...

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 694
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Il y a beaucoup de choses à dire ...

    1. il faut communiquer la requête envoyée au moteur du SGBD et non le bout de code PHP
    2. il faut communiquer la description de vos tables (ordres DDL CREATE TABLE)
    3. il faut communiquer un extrait du résultat obtenu et du résultat attendu
    4. un minimum de mise en forme de la requête facilite la compréhension et donc la maintenance
    5. l'utilisation d'alias est fortement recommandé en cas de jointure
    6. les jointures se codent avec l'opérateur JOIN depuis la norme SQL 1992
    7. nommer une table "listeeleve" est une erreur, il est évident que toute table contient potentiellement plusieurs occurrences ! il s'agit donc de la table eleve



    Si, comme je le crains, vous souhaitez ne pas réafficher les attributs d'un même élève pour les différentes matières, alors il s'agit de mise en forme qui ne doit pas être traitée par la requête, mais par l'application

    Enfin, sauf si les moyennes vous sont communiquées par une application tierce, il faut stocker les notes et non les moyennes, puis calculer la moyenne à chaque fois que c'est nécessaire.

  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
    1) Les jointures s'écrivent depuis 1992 avec l'opérateur JOIN ; il serait temps de s'y mettre !

    2) L'utilisation d'alias pour les tables est fortement recommandé dès qu'il y a plus d'une table dans la requête. Cela facilite l'écriture et la lecture de celle-ci. Il faut ensuite utiliser systématiquement ces alias devant chaque colonne nommée pour savoir facilement de quelle table elle vient.

    3) Un code indenté et aéré est plus agréable à lire et à déboguer.

    4) L'extension PHP mysql_* est obsolète ! Il vaut mieux utiliser aujourd'hui PDO ou à la rigueur mysqli_*

    5) Autres commentaire dans votre code catastrophique récrit ci-dessous...
    Code PHP : 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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <table  align="center" width="100%" background="images/coi.jpg" class="gtitr" width="50%" border="3" bordercolor="#990000"  >
    	<tr align="center">
    		<td>  
    <?php
    include("configu.php");
     
    function classement()
    {
    	$results = array();
    	$sql = '
    		SELECT DISTINCT l.nomre, l.prenomsre, l.classere, l.matricule, l.avatarre,
    			f.matricule, f.moyenne, f.matiere, f.rang, f.professeur 
    		FROM listeleve l
    		INNER JOIN frang f ON f.matricule = l.matricule
    		WHERE l.classere = :classe
    		ORDER BY l.nomre, l.prenomsre 
    	';
     
    	try
    	{
    		$prep = $pdo->prepare($sql); // $pdo est une connexion de PDO et doit avoir été préalablement défini.
    		$prep->bindParam(':classe', $_GET['classe'], PDO::PARAM_STR) // Si la colonne classere est de type entier, modifier le PDO::PARAM_STR en PDO::PARAM_INT
    		$prep->execute();
     
    		$result = $prep->fetchAll();
    	}
    	catch (PDOException $e)
    	{
    		// Traitement de l'erreur éventuelle
    		$erreur = 'Erreur PDO rencontrée dans le fichier '.$e->getFile().' à la ligne '.$e->getLine().' :<br />'.$e->getMessage();
    		// et là vous faites ce que vous voulez de l'erreur
    		echo $erreur;
    	}
    }  
     
    $classements = classement();
     
    foreach($classements  as $classement)
    {
    // Bizarre ici de passer en style de texte <h3> dans une cellule de tableau !
    // Vous affichez l'ensemble du résultat de la requête dans une cellule ?
    ?>
    	<h3>
    		Nom : 
    		<?php echo $classement["nomre"].'---'.'<br /> Prénoms : '.$classement['prenomsre']; ?>
    	<hr/>
    <?php // On démarre en <h3> et on ferme en </hr> ? !! ?>
    	MATIERE : <?php echo $classement['matiere'].'---MOYENNE : '.$classement['matiere'].'---rang:'.$classement['matiere']; // La matière et la moyenne affichent la même chose !!
    } 
    // On ferme la cellule, la ligne et le tableau quand ?
    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 actif
    Inscrit en
    Mars 2013
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 70
    Par défaut
    je vais essayer ces propositions et je reviens.merci pour votre disponibilité

  6. #6
    Membre actif
    Inscrit en
    Mars 2013
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 70
    Par défaut
    merci infiniment.vos contributions m'ont aidé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $nomeleve = "";
    foreach($classements as $classement){
    if($nomeleve != $classement["nomre"]){
    $nomeleve = $classement["nomre"];
    // affichage du nom de l'éleve
    echo '...';
    }
    //affichage d'une note
    echo '...';
    }
    mais j'ai un dernier souci.je voudrais mettre la signature du directeur.quand je la mets en bas lui aussi se répète avec toutes les matières.
    comment gérer cela?

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 694
    Billets dans le blog
    10
    Par défaut
    Là encore, même réponse, il s'agit d'une question relative à la présentation des données, sans rapport avec le SGBD ou le langage SQL
    La solution est donc du coté de l'application, posez votre question dans le forum PHP

Discussions similaires

  1. affichage résultat requête avec jointure.
    Par yulione dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 19/04/2017, 16h52
  2. requette avec jointure et affichage redondant
    Par gilles974 dans le forum Requêtes
    Réponses: 26
    Dernier message: 25/10/2008, 13h35
  3. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 10h21
  4. Problème d'affichage avec trace
    Par WriteLN dans le forum Flash
    Réponses: 10
    Dernier message: 22/10/2003, 17h59
  5. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 11h33

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