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 :

Structurer table SQL


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 124
    Points : 50
    Points
    50
    Par défaut Structurer table SQL
    Bonjour,

    Je fais actuellement un site pour un club de football, celui-ci est déjà bien avancé mais je bloque sur 2 choses qui m'empêchent d'avancer. J'ai beau chercher je n'arrive pas à trouver la solution.

    Je vous explique:


    Le premier serait de permettre aux différents coach de saisir si un joueur marque un but, fais une passe décisive ou prends un carton durant un match. La table statistiques comporte 8 champs:
    id | num_joueur |equipe| nbr_but | nbr_passe | carton_jaune | carton_rouge |date_but|

    A savoir que num_joueur correspond à l'ID de joueur de la table principal.
    Si un joueurs marque un but ou fait une passe ou autre cela ajoute une ligne, et lors de l'affichage des stats je demande d'additionner les infos. Jusque là tout fonctionne. Cependant je ne sais pas comment faire pour afficher si un joueur à marquer en equipe A ou en equipe B ou en C. Le champ "equipe" contient la lettre mais comment l'afficher.

    Sur une page qui contient toutes les informations d'un joueur j'ai fait une requête qui me permet de voir tous les champs de la table "donnees_perso" (avec nom, prenom, mail, telephone, date de naissance etc...) avec en jointure la table statistiques (qui contient nbr_but, nbr_passe etc..). Voici ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $req_info = "SELECT SUM(nbr_but)AS nbr_but, 
                   SUM(nbr_passe)AS nbr_passe, SUM(carton_jaune)AS carton_jaune, 
                   SUM(carton_rouge)AS carton_rouge, categorie, nom, prenom, mail, telephone, disponible, chemin_photo, DATE_FORMAT(date_naissance, '%d/%m/%Y') AS date_naissance FROM $table_1 a LEFT JOIN 
    			   $table_8 b ON a.id = b.num_joueur WHERE nom = '$info[0]' AND prenom = '$info[1]' GROUP BY a.nom";
    Comment afficher le nbr_but en équipe A et nbr_but en equipe B etc.. J'ai beau chercher je ne trouve pas. Je ne sais pas si ma requête me permet de faire cela. Je ne sais pas du tout comment tourner mon truc pour y arriver.

    La seconde chose est que je dois aussi afficher le nombre de matchs joué en équipe A, le nbr de match en équipe B et le nbre de match en équipe C. Je pensais créer une table, mais je ne sais pas du tout comment la structurer. Je pensais à ça:

    id|num_joueur| equipe | nbr_match

    Avec un UPDATE sur le champs nbr_match, mais si le joueur n'existe pas, il faudrait le créer, donc utiliser INSERT INTO complé avec ON DUPLICATE KEY, mais dans ce cas là num_joueur serait unique, donc il ne pourrait pas y avoir 2 lignes pour le même joueur alors qu'il en faudrait, si le joueur à joué dans l'equipe A l'equipe B et l'equipe C.

    C'est très dur à expliquer, j'ai essayé de coucher ça sur papier, mais rien n'y fait, c'est pour cela que je demande votre aide.

    J'espère être explicite , malgré tout

    En vous remerciant d'avance

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Utilise un GROUP BY
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT equipe, SUM(nbr_but) AS nbr_but, 
                        SUM(nbr_passe) AS nbr_passe,
                        SUM(carton_jaune)AS carton_jaune
             FROM ta_table
             GROUP BY equipe
    C'est la meme chose pour le nombre de match par équipe.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 124
    Points : 50
    Points
    50
    Par défaut
    Merci pour la réponse. J'ai modifié la structure de ma table en couplant 2 champs en UNIQUE, et j'ai fait ma requête en utilisant GROUP BY equipe. Mais un autre problème se pose maintenant, lorsque je demande l'affichage des stats, vu que ceux-ci se trouvent dans une boucle il m'affiche 2 fois toutes les infos.

    Je m'explique, je demande de m'afficher catégorie, téléphone, mail, et date de naissance qui se trouvent dans ma table principal 1 seul fois, et afficher les infos de ma table statistiques par équipe. Genre si un joueur à marqué un but en équipe A et 1 but en équipe B, je voudrais qu'il soit affiché, But en A : valeur; et but en B: valeur. Alors que là il m'affiche tout (table principal et table stats) 2 fois, ce qui est normal vu que dans ma boucle. Une pour équipe A et une pour équipe B.

    Donc dois-je ajouter une requête ou changer mon code.

    Voici comment est présenté le mien:

    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
     
    	$req_info = "SELECT *, SUM(nbr_but)AS nbr_but, 
                SUM(nbr_passe)AS nbr_passe, SUM(carton_jaune)AS carton_jaune, 
                SUM(carton_rouge)AS carton_rouge, categorie, DATE_FORMAT(date_naissance, '%d/%m/%Y') AS date_naissance FROM $table_1 a INNER JOIN 
                  $table_8 b ON a.id = b.num_joueur WHERE nom = '$info[0]' AND prenom = '$info[1]' GROUP BY a.nom";
     
     
    		$req_cnx_info = mysql_query($req_info);
     
    		while($donnees = mysql_fetch_array($req_cnx_info))
    		{
     
    ?>			
     
     
     
    <span class="titre_info">Voici les information concernant <?php echo $info[1]." ".$info[0]; ?> </span>: <br/><img src="<?php echo $donnees['chemin_photo']; ?>" width="80" height="100">
    <br/>
    <span class="titre_info">Categorie :</span> <?php echo ($donnees['categorie']); ?>
    <br/>
    <span class="titre_info">Date de naissance :</span> <?php echo $donnees['date_naissance']; ?>
    <br/>
    <span class="titre_info">Adresse mail :</span> <?php echo $donnees['mail']; ?>
    <br/>
    <span class="titre_info">Téléphone :</span> <?php echo $donnees['telephone']; ?>
    <br/><br/>
    <span class="titre_info"><?php echo $but_marque; ?>:</span> <?php echo $donnees['nbr_but']; ?>
    <br/>
    <span class="titre_info"><?php echo $passe_decisive; ?>:</span> <?php echo $donnees['nbr_passe']; ?>
    <br/>
    <span class="titre_info"><?php echo $carton_jaune." jaune"; ?>:</span> <?php echo $donnees['carton_jaune']; ?>
    <br/>
    <span class="titre_info"><?php echo $carton_rouge." rouge"; ?>:</span> <?php echo $donnees['carton_rouge']; ?>
    <br/>
    <span class="titre_info"><?php echo $match_joue; ?>:</span> <?php echo $donnees['nbr_match_joué']; ?>
    <br/><br/>
    <?php
     
    	if ($donnees['disponible'] == "oui")
    	{
    		echo "Le joueur est disponible pour les matchs";
    	}
    	else
    	{
    		echo "<p>Le joueurs n'est pas disponible actuellement</p>";
    	}
    	}
    }}
    ?>
    Encore merci

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    La table statistiques comporte 8 champs:
    id | num_joueur |equipe| nbr_but | nbr_passe | carton_jaune | carton_rouge |date_but|

    A savoir que num_joueur correspond à l'ID de joueur de la table principal.
    Si un joueurs marque un but ou fait une passe ou autre cela ajoute une ligne
    Les colonnes de cette table ne sont pas cohérentes. Puisqu'une nouvelle ligne est insérée à chaque passe, il ne doit pas y avoir en même temps un champ nbr_passe dans cette table, car on ne peut à la fois avoir un détail et un cumul de la même info dans une seule table.
    De même date_but suppose qu'on se réfère à un but particulier, alors que nbr_but suppose qu'une ligne de la table concerne plusieurs buts: c'est également contradictoire.

    Du point de vue du modèle, il serait plus correct de faire des tables séparées: match avec 1 ligne par match, but avec 1 ligne par but, carton avec 1 ligne par carton, et si nécessaire une table passe avec 1 ligne par passe, etc... Tu auras des jointures à faire pour exploiter ensuite ces tables, mais c'est la bonne direction, alors qu'avec la table statistiques telle que décrite plus haut, les vices de conception vont faire que tu ne vas pas t'en sortir.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour !
    j ai creer un siteweb en php mysql dans l environement easyphp et j ai un probléme dans la base de donnees mysql , car je doit importer des feuilles excel comme etant des donnees vers ma base sql dans une seule table j ai chercher et j ai essayer le logiciel convert to mysql mais ca marche pas , ca fonctionne mal et chaque classeur présente une table et ce n'est pas ce que je veux ! aider moi svp
    merci d avance

Discussions similaires

  1. Table SQL server liée dans Access 2010 - Mise àjour structure
    Par NicolaTesla dans le forum Modélisation
    Réponses: 1
    Dernier message: 30/01/2014, 16h04
  2. Structure de table SQL, besoin de conseils
    Par k2006 dans le forum Requêtes
    Réponses: 4
    Dernier message: 13/01/2010, 15h36
  3. modifier la structure d'une table sql server2000
    Par pigeon11 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 19/03/2009, 18h18
  4. Réponses: 12
    Dernier message: 20/06/2007, 12h01
  5. Avantage Désavantage structuration de Table SQL
    Par jflebegue dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 01/12/2004, 18h40

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