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 :

Structure de table trop "horizontale"


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de php_de_travers
    Inscrit en
    Juin 2004
    Messages
    460
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 460
    Par défaut Structure de table trop "horizontale"
    Bonjour,

    quelle serait la meilleure façon de réaliser une structure de table avec des infos organisées comme en tableur :

    sport : basket
    [equipe] [j1] [j2] [j3]
    equipe 1 max bob luc
    equipe 2 eric toto tom
    equipe 3 lola nina susie
    equipe 4 nico boby edy

    NB : je dois pouvoir traiter également le foot, le rugby et le volley

    Ma solution

    id->1
    nom_sport->basket
    nom_equipe_1->equipe 1
    equipe1_j1->max
    equipe1_j2->bob
    equipe1_j3->luc
    equipe2_j1->eric
    equipe2_j2->toto
    etc...

    id->2
    nom_sport->foot
    etc...

    Je n'ai donc que 4 enregistrements (basket / foot / rugby / volley) pour des tables avec des dizaines de champs

    Avez-vous une idée pour optimiser ce "machin", en le rendant plus "vertical" ?

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    Si j'ai bien compris tu veux gérer des équipes de sport.
    Je ferais les tables suivantes :

    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
    sports
    ---------
    id
    nom
     
    équipes
    ---------
    id
    nom
    sport # Clef étrangère sur sports.id
     
    joueurs
    ---------
    id
    nom
    prénom
    équipe # Clef étrangère sur équipes.id
    Enregistrements de sports :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1, Football
    2, Basketball
    Enregistrements de équipes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1, Olympique de Marseille, 1
    2, Paris St-Germain, 1
    3, Pau-Orthez, 2
    Enregistrements de joueurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1, Rothen, Jérôme, 2
    2, Mandanda, Steve, 1
    3, Bonnart, Laurent, 1
    Ensuite pour connaître toutes les équipes de foot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ALL équpes.id, équipes.nom
    FROM équipes INNER JOIN sports ON équipes.sport = sports.id
    WHERE sports.nom = 'Football'
    Pour connaître tous les joueurs de foot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ALL joueurs.id, joueurs.nom, joueurs.prénom, équipes.nom
    FROM joueurs
    INNER JOIN équipes ON joueurs.équipe = équipes.id
    INNER JOIN sports ON équipes.sport = sports.id
    WHERE sports.nom = 'Football'
    etc.

  3. #3
    Membre éclairé Avatar de php_de_travers
    Inscrit en
    Juin 2004
    Messages
    460
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 460
    Par défaut
    Voilà une réponse très détaillée. Merci pour cette piste.

    Est-elle viable si je passe en sqlite ?

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    Je ne connaîs pas SQLite, mais vu qu'il n'y a rien de bien particulier je pense que oui.

  5. #5
    Membre éclairé Avatar de php_de_travers
    Inscrit en
    Juin 2004
    Messages
    460
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 460
    Par défaut
    Bonjour,

    dans la solution que tu proposes, peut-on créer un formulaire pour réaliser une actualisation en tableau (<table> pas array()) de toutes les infos pour un sport ?

    C'est à dire sur le même formulaire afficher puis mettre à jour toutes les infos concernant le nom des joueurs + le nom de l'équipe, pour sport donné.
    Cela revient à afficher le formulaire en tableau (le sport) et non pas en ligne (l'équipe). je me demande, alors, comment nommer les champs du formulaire puisque par exemple il n'y aura qu'un seul champ joueur_1 pour toutes les équipes...

    Donc je cale vraiment pour me passer de mes tableaux trop "horizontaux".

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    Oui, c'est possible.
    Le plus simple et le plus efficace pour avoir un form dynamique est de nommer les champs avec des [], ainsi les saisies seront placées dans un tableau PHP.

    Ex. :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Joueur n° 1 <input type="text" name="joueurs[]"><br>
    Joueur n° 2 <input type="text" name="joueurs[]"><br>
    Joueur n° 3 <input type="text" name="joueurs[]"><br>
    ...
    Ou si tu veux définir toi-même les index :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Joueur n° 1 <input type="text" name="joueurs[0]"><br>
    Joueur n° 2 <input type="text" name="joueurs[1]"><br>
    Joueur n° 3 <input type="text" name="joueurs[2]"><br>
    ...

  7. #7
    Membre éclairé Avatar de php_de_travers
    Inscrit en
    Juin 2004
    Messages
    460
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 460
    Par défaut
    Ok pour les formulaires.

    Tu gères comment les clauses WHERE des update ?

  8. #8
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    Tu peux mettre l'identifiant du joueur entre crochets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Edition du joueur Jérôme Rothen (#123)
    <input type="text" name="joueurs[123]" value="Jérôme Rothen">
    ...
    Ensuite lors du traitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ( $_POST['joueurs'] as $id => $nom ) {
        ...
    }

  9. #9
    Membre éclairé Avatar de php_de_travers
    Inscrit en
    Juin 2004
    Messages
    460
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 460
    Par défaut
    Très impressionné par ce niveau de compétences !

    Merci.

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

Discussions similaires

  1. supprimer une table qui a des quotes dans son nom
    Par kleenex dans le forum Access
    Réponses: 2
    Dernier message: 17/10/2005, 16h03

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