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 :

des difficultés sur mes requêtes. [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 67
    Par défaut des difficultés sur mes requêtes.
    bonjours à tous.

    Un amis m'a demandé de lui créer un petit programme pour le célèbre jeu WARHAMMER. Ce script consiste à la création d'une fiche dites fiches de bandes.

    comme vous pouvez vous en douter j'ai plusieurs tables.
    pour afficher les éléments de la fiche de bande je fait appelle à plusieurs d'entre elles.
    Afin que vous puisiez m'aider voici quelques éléments d'explications :
    warhammer est un jeu de plateau constituer de PERSONNAGES. chaque personnage fait partie d'une RACE. Il existe plusieurs type de personnage : les héros et les hommes de mains. Chaque personnage a des CARACTERISTIQUES et des COMPETENCES.
    jusque la rien de difficile !
    Chaque personnages fait partie d'une bande ( selon sa race : on ne peut pas créer une bande avec des races multiples ). Donc jusqu'à présent ont à :
    des bandes constituée de personnages qui font partie d'une race. Lorsque les personnages font partie d'une bande, les joueurs (ou utilisateurs) l'affuble d'un pseudo. A chaque fois qu'une partie est jouée, le personnage subit des événements (un bras cassé, augmentation de l’expérience...etc !!). et c'est la que j'ai des problèmes.

    en effet lorsque je veux afficher ma bande je fais ceci :
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    $requete=" SELECT
    bandes.*,
    personnages.*,
    pseudos.*
    FROM personnages,pseudos,bandes,perso_pseudo
    WHERE  personnages.id=perso_pseudo.id_perso
    and pseudos.id=perso_pseudo.id_pseudo
    and bandes.id=$bande_id
    group by perso_pseudo.id_pseudo";
     
    // on execute la requete
    $result = mysql_query($requete) or 
    die('Echec de requête ligne : '.__LINE__.'<br />
    avec la requête : '.$requete.'<br />.
    avec le message : '.mysql_error()
    );
     
    //on recupere le resultat de la requete
    $compte= mysql_num_rows($result);
     
    //on teste si on recupere des enregistrements
    //si la table est vide
    if ($compte==0){
    echo ' Il n\'y a actuellement aucuns soldats dans cette bande. Désirez-vous en <a href="creerBandes.php">créer</a> une ?'; 	
    }else{
    //si la table contient au moins un enregistrement, on l'affiche.
    while ($detailbande=mysql_fetch_array ($result)){	
    	$bande_id=$detailbande['id'];
    	$bande_nom=$detailbande['nom_bande'];
    	$bande_nom_perso=$detailbande['nom'];
    	//$bande_userId=$detailbande['user_id'];
    	//$bande_valeur=$detailbande['valeur'];
    	$bande_perso_id=$detailbande['id'];
    	$bande_pseudoPerso=$detailbande['libelle_pseudo'];
    	$bande_pseudoDescription=$detailbande['histoire_pseudo'];
    	$bande_pseudoM=$detailbande['mouvement'];
    	$bande_pseudoCC=$detailbande['capacite_combat'];
    	$bande_pseudoCT=$detailbande['capacite_tir'];
    	$bande_pseudoF=$detailbande['force'];
    	$bande_pseudoE=$detailbande['endurance'];
    	$bande_pseudoPV=$detailbande['point_de_vie'];
    	$bande_pseudoI=$detailbande['initiative'];
    	$bande_pseudoA=$detailbande['attaque'];
    	$bande_pseudoC=$detailbande['commendemant'];
    	$bande_pseudoXptotal=$detailbande['xp_total'];
    	$bande_pseudoCoutTotal=$detailbande['cout_total'];
    	$bande_persoCoutBase=$detailbande['cout_base'];
    	$bande_persoXp_base=$detailbande['experience_base'];
     
     
    ?>
    <ul>
      <!--case 1 -->       
     <li><?php echo $bande_pseudoPerso; ?></li>
     <li>XP de base : <?php echo $bande_persoXp_base; ?></li>
     <li>XP total : <?php echo $bande_pseudoXptotal; ?></li>
     <li><?php echo $bande_pseudoDescription; ?></li>
     
     <li><?php echo $bande_dateEvenement; ?></li>
     <li><?php echo $bande_libelleEvenement; ?></li>
     
     <!-- case 2 -->
     <li><?php echo $bande_nom_perso; ?></li>
     <li>M : <?php echo $bande_pseudoM; ?></li>
     <li>CC : <?php echo $bande_pseudoCC; ?></li>
     <li>CT : <?php echo $bande_pseudoCT; ?></li>
     <li>F : <?php echo $bande_pseudoF; ?></li>
     <li>E : <?php echo $bande_pseudoE; ?></li>
     <li>PV : <?php echo $bande_pseudoPV; ?></li>
     <li>I : <?php echo $bande_pseudoI; ?></li>
     <li>A : <?php echo $bande_pseudoA; ?></li>
     <li>C : <?php echo $bande_pseudoC; ?></li>
     <li>cout de base : <?php echo $bande_persoCoutBase; ?></li>
     </ul>
    </section><!-- fermeture de la section descrptif-->
    </div><!-- fermeture de la div center-->
     
    <?php } }?>
    donc ce code m'affiche bien tout mes personnages qui sont dans la bande sélectionnée. par contre un personnage qui a un pseudo ( puisqu'il fait partie d'une bande) peux avoir 1 ou n événements lié à l'action du jeu. Bien sur dés que je veux les afficher je n'arrive à en affiché qu'un par personnage.

    voici le code que j'ai écrit :

    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
    <?php 
     
    //voir tout les evenements de la bande classé par pseudo
    $requete_evenements="select distinct evenements.*
    from bandes,evenements,personnages,pseudos,perso_pseudo
    where evenements.id=perso_pseudo.id_evenement
    and bandes.id=$bande_id
    order by id_pseudo";
     
    // on execute la requete
    $result_evenements = mysql_query($requete_evenements) or 
    die('Echec de requête ligne : '.__LINE__.'<br />
    avec la requête : '.$requete_evenements.'<br />.
    avec le message : '.mysql_error()
    );
     
    //on recupere le resultat de la requete
    $compte_evenements= mysql_num_rows($result_evenements);
     
    //on teste si on recupere des enregistrements
    //si la table est vide
    if ($compte_evenements==0){
    echo ' Il n\'y a actuellement aucuns événements dans cette bande. Désirez-vous en <a href="creerBandes.php">créer</a> un ?'; 	
    }else{
    //si la table contient au moins un événement, on l'affiche.
    while ($evenementbande=mysql_fetch_array ($result_evenements)){
    $bande_dateEvenement=$evenementbande['date'];
    $bande_libelleEvenement=$evenementbande['libelles'];
    } }
    ?>
    Alors j'ai tenté de faire qu'une seule requette avec celle ci et celle du dessus, de les imbriquer, de les séparer rien n'y fait.
    A l'heure actuelle, ma dernière requête est située au dessus de la première.

    mon objectif est d'afficher les éléments de ma fiche de bande en sachant qu'un personnage peut avoir 1 ou n événements et que j'ai besoin d'afficher tout les événements lié a chaque personnage de la bande.

    merci de votre aide !

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Par défaut
    Si tu peux dessiner des tableau comme exemple des table utilisé et un autre pour le résultat que tu cherche, ça pourra nous aidé a comprendre

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 28
    Par défaut
    Salut!

    Ca pourrait être pas mal d'avoir l'architecture de chaque table, c'est dur de savoir ce que tu essayes de faire.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 67
    Par défaut
    https://cacoo.com/diagrams/pkU0mK0Ule4viPdH

    et au cas ou le lien ne fonctionne pas :

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 28
    Par défaut
    J'ai du mal à comprendre ce que sont les tables
    • perso_pseudo
    • pseudos

    Pourquoi elles ne sont pas directement liées au personnage? (Même question pour evenement et bandes)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 67
    Par défaut
    et bien un si je me souvient bien :
    un personnage peut avoir ou pas un pseudo.
    cependant, dans "ma bande " je peux avoir plusieurs fois le même personnage mais ce personnage peut avoir des pseudo différents.
    par exemple dans "ma bande" je peux avoir 4 héros chaman homme bête.
    ces 4 héros sont 4 personnages différents de ma bande mais ils ont tous les même caractéristiques et compétences de base. Mais chacun, dans le jeu évoluera de manière différente( lié aux événements du jeu).
    comme chaque personnage peut avoir des pseudos différents et que chacun évolue de manière différentes tu sais maintenant pourquoi j'ai une table pseudo et une table personnage liée entre elle par une table perso_pseudo car si un personnage peut avoir 0,n pseudo un pseudo peut aussi etre porté par 0,n personnage donc dans ce genre de cardinalité on fait une table de jointure...je crois !!!

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 28
    Par défaut
    D'accord, je pense avoir compris.

    Ta table personnages n'est pas vraiment une table de personnage jouable, mais une table d'archétype de personnage, et le personnage en tant que tel est caractérisé par "perso_pseudo".

    Il y a quelques détails qui me gène dans ton architecture
    • Les tables perso_caracteristique et perso_competence ne pourraient pas être remplacées par un champ chacune dans dans la table personnage? Au lieu de les utiliser pour lier un personnage.id avec un caracteristique.id, pourquoi ne pas simplement mettre le caracteristique.id dans la table personnage?
    • Le fait que la table evenements ait un id qui renvoie sur perso_pseudo.id_evenement me chiffone un peu. Si un perso_pseudo peut avoir plusieurs evenements qui lui sont attribués, mais si chaque evenement n'est attributé qu'a un perso_pseudo, alors le mieux est de stocker l'id du perso_pseudo directement dans evenements, non?
    • Les informations stockées dans pseudos ont l'air très spécialisées, et doivent correspondre à un et seulement unique personnage, non? Les informations dans cette table ne seraient pas mieux dans perso_pseudo?
    • L'information de la race ne pourrait pas se trouver dans la bande, s'il n'y a qu'une seule race par bande?


    En gros,
    Fusionner pseudos et perso_pseudo si une seule entrée dans l'une correspond à une et une seule entrée dans l'autre
    Faire en sorte que l'id de l'évènement soit l'id du perso_pseudo a qui il est associé
    Virer perso_pseudo.id_evenement (qui indique qu'un perso_pseudo est lié à un seul événement)
    Enlever les tables persos_carac et persos_comp et stocker l'id de comp et carac directement dans Personnages

    Ce qui fusionne 2 tables et en élimine 2 autres.

    Ensuite, évite de faire des requêtes trop compliquées. Hésite pas à faire plus de requêtes. Je pense pas que tu en sois au point où il faut limiter le nombre de connexion à la DB, donc tu peux t'amuser à faire une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT id FROM perso_pseudos WHERE bande_id = $id"
    qui te retourne les id de tous les personnages qui appartiennent à ladite bande.

    Une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM perso_pseudos WHERE id = $id"
    qui te retourne les informations sur le personnage a ladite $id

    Et une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM events WHERE perso_id = $id"
    qui te retourne les informations sur les events associés au personnage $id

    Et faire quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $bande_id = 2;
    foreach(get_bande($bande_id) as $perso_id){
        var_dump(get_events($perso_id));
    }
    Essaye pas de te lancer dans des unions de 7 tables.

    (Si c'est pas clair je verrais pour un diagramme mais l'appli a planté 3 fois de suite ça m'a un peu gonflé)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 67
    Par défaut
    bonsoir,
    je vais mettre en application les informations que tu m'as donné je te tien au courant ce lundi ( pas cool le travail du week end )

    merci encore

    apres reflexion et verification de la structure de mes table :
    Les tables perso_caracteristique et perso_competence ne pourraient pas être remplacées par un champ chacune dans dans la table personnage? Au lieu de les utiliser pour lier un personnage.id avec un caracteristique.id, pourquoi ne pas simplement mettre le caracteristique.id dans la table personnage?
    pour la table perso_caracteristique pas de probleme j'ai passé l'id caracteristique au personnage puisqu'un personnage ne peut avoir qu'une caracteristique et qu'une caracteristique peut etre attribué à un ou plusieurs personnage.
    pour les compétences c'est différent puisqu'un personnage peux avoir plusieurs competence et qu'une competence peut etre attribuée à plusieurs personnages. donc je suis obligé de garder la table perso_competence

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 67
    Par défaut
    salut winks.

    bon et bien décidément je m'en tire plutot mal avec les fonctions....
    peu importe ce que je met dedans ( requete seul ou bien requete et l'execution de la requete bref....) soit je n'affiche rien soit je me retrouve avec des variable non définie !!!!

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 28
    Par défaut
    Ok, est-ce que tu peux me passer un export de tes tables avec quelques données dedans, que je puisse te montrer quelques exemples?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 67
    Par défaut
    je ne sais pas si tu as vu mais je t'ai envoyé ça en MP !

    merci de ton aide !

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 67
    Par défaut
    bon et bien je vais clore ce topic et je remercie tout particulièrement
    Winks de son aide.

    je n'ai pas réussi à faire ce que je voulais même si je m'en suis approché. Mais grace à WINKS je vois la programmation orienté objet d'une autre manière (en tout cas j'ai moins d'appréhension à l'utiliser ) me reste plus qu' a comprendre certaines syntaxe !!!

    merci !

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

Discussions similaires

  1. Des Shadow sur mes Tabs
    Par Gaaaga dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 23/05/2008, 09h06
  2. Affichage des accents sur mes pages
    Par ned-flanders dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 29/02/2008, 12h24
  3. Réponses: 3
    Dernier message: 06/06/2007, 17h13
  4. des difficultés sur des methodes
    Par bambi98 dans le forum UML
    Réponses: 4
    Dernier message: 12/12/2006, 09h32
  5. Récupérer des infos sur mes sites
    Par meufeu dans le forum Langage
    Réponses: 3
    Dernier message: 27/04/2006, 10h25

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