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 jointure pour inscrire un joueur


Sujet :

PHP & Base de données

  1. #41
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    si je reprend l'exemple de la valeur "mezieres" dans la table inscription j'ai deux Joueur qui correspondent valeur 5 et 14 et quand je regarde dans la table joueur NumLicence=5 et NumLicence=14 existe. J'ai testé pour d'autre valeur de tournoi et c'est le meme constat.
    Donc n'est ce pas un soucis de requete.
    Et bien là, je suis comme toi, assez surpris.
    Dire que c'est la Bdd qui déconnerait, je la trouve un peu facile.


    Essai en supprimant LIKE, et de faire un =
    -> WHERE Lieu = '$search'

    Puis aussi, de supprimer le LEFT à left join (même si ici un left join devrait récupérer les 2 lignes 5 et 14)
    -> JOIN inscription ON NumLicence = Joueur
    Ou/et
    -> INNER JOIN inscription ON NumLicence = Joueur
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  2. #42
    Débutant Avatar de VIRGINIE87
    Femme Profil pro
    Sans Emploi
    Inscrit en
    Avril 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Points : 72
    Points
    72
    Par défaut
    toujour aucun enregistrement correspond en testant toutes les possibilités que tu m'a dis

  3. #43
    Membre actif
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 210
    Points
    210
    Par défaut
    Je crois que le problème réside dans le fait que le champs Lieu présent dans la table inscription ne contient qu'une valeur numérique faisant référence à l'identificateur dans la table tournoi. Donc il n'est pas logique de vérifier le lieu comme tu le fais. Il faut donc rajouter une jointure vers la table tournoi pour que ta requête fonctionne bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $req= mysql_query("SELECT Nom, Prenom, joueur.Classement from inscription
     join inscription on NumLicence = Joueur
    join tournoi on inscription.Lieu = Tournoi.ID
      WHERE tournoi.Lieu LIKE '%$search%'
    order by joueur.Classement DESC,Nom, Prenom")  or die(mysql_error());
    Je ne me souviens plus exactement de l'appellation des champs, mais je crois que tu comprends où je veux en venir.

  4. #44
    Débutant Avatar de VIRGINIE87
    Femme Profil pro
    Sans Emploi
    Inscrit en
    Avril 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Points : 72
    Points
    72
    Par défaut
    je n'arrive pas à comprendre cette requete

  5. #45
    Membre actif
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 210
    Points
    210
    Par défaut
    Qu'est ce que tu ne comprends pas?

  6. #46
    Débutant Avatar de VIRGINIE87
    Femme Profil pro
    Sans Emploi
    Inscrit en
    Avril 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Points : 72
    Points
    72
    Par défaut
    Pour commencer la premiere ligne
    Nom, Prenom ne se trouvent pas dans la table inscription

  7. #47
    Membre actif
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 210
    Points
    210
    Par défaut
    Exact, mais le fait de faire une jointure vers une autre table rend les champs accessibles et on peut aller les chercher comme je le fais. C'est un peu anti-intuitif, mais je n'ai pas inventé le langage SQL he he he.

    D'ailleurs, comme on a 2 jointures, on est obligé de faire un select de la table inscription, parce que c'est elle qui agit comme "intersection" (elle contient les informations de liaison entre les tables tournoi et joueur).

  8. #48
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Peux tu poster ce que tu as dans ces 2 tables, et pour les valeurs qui devraient être récupérées (la 5 et 14), et pour les champs concernés.
    Une histoire de dingue n'empêche.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  9. #49
    Débutant Avatar de VIRGINIE87
    Femme Profil pro
    Sans Emploi
    Inscrit en
    Avril 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Points : 72
    Points
    72
    Par défaut
    voici mon fichier sql

    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    -- phpMyAdmin SQL Dump
    -- version 3.2.0.1
    -- http://www.phpmyadmin.net
    --
    -- Serveur: localhost
    -- Généré le : Mer 01 Septembre 2010 à 14:10
    -- Version du serveur: 5.1.36
    -- Version de PHP: 5.3.0
     
    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
     
     
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
     
    --
    -- Base de données: `gestiontournoi`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `inscription`
    --
     
    CREATE TABLE IF NOT EXISTS `inscription` (
      `idinscrit` int(11) NOT NULL AUTO_INCREMENT,
      `Lieu` int(11) NOT NULL,
      `Joueur` int(11) NOT NULL,
      PRIMARY KEY (`idinscrit`),
      KEY `Lieu` (`Lieu`,`Joueur`),
      KEY `Joueur` (`Joueur`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=25 ;
     
    --
    -- Contenu de la table `inscription`
    --
     
    INSERT INTO `inscription` (`idinscrit`, `Lieu`, `Joueur`) VALUES
    (15, 11, 5),
    (1, 11, 14),
    (3, 11, 15),
    (16, 12, 5),
    (2, 12, 14),
    (17, 12, 15),
    (24, 13, 5),
    (4, 13, 15),
    (18, 14, 5),
    (19, 14, 14),
    (22, 17, 16),
    (23, 21, 5),
    (14, 21, 15),
    (21, 21, 16),
    (13, 22, 14);
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `joueur`
    --
     
    CREATE TABLE IF NOT EXISTS `joueur` (
      `NumLicence` int(10) NOT NULL AUTO_INCREMENT,
      `Nom` varchar(150) NOT NULL,
      `Prenom` varchar(150) NOT NULL,
      `Adresse` varchar(150) NOT NULL,
      `Classement` text NOT NULL,
      PRIMARY KEY (`NumLicence`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=18 ;
     
    --
    -- Contenu de la table `joueur`
    --
     
    INSERT INTO `joueur` (`NumLicence`, `Nom`, `Prenom`, `Adresse`, `Classement`) VALUES
    (5, 'lavalette', 'virginie', '10 imp da la garenne ', '1054'),
    (14, 'xxxx', 'qsqsqs', '<wx<wx<dxqsd', '2010'),
    (15, 'rrrrr', 'xxx', 'w<xxw<x', '1950'),
    (16, 'mazout', 'seb', '1cxxwxc', '1200'),
    (17, 'dupond', 'jacques', '15ddqsdqd', '1600');
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `match`
    --
     
    CREATE TABLE IF NOT EXISTS `match` (
      `NumMatch` int(11) NOT NULL AUTO_INCREMENT,
      `NumTable` varchar(50) NOT NULL,
      `NumRonde` varchar(50) NOT NULL,
      PRIMARY KEY (`NumMatch`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
     
    --
    -- Contenu de la table `match`
    --
     
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `membre`
    --
     
    CREATE TABLE IF NOT EXISTS `membre` (
      `id` int(2) NOT NULL AUTO_INCREMENT,
      `login` varchar(100) NOT NULL,
      `pass` varchar(255) NOT NULL,
      `email` varchar(255) NOT NULL,
      `hash` varchar(255) NOT NULL,
      `actif` int(1) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;
     
    --
    -- Contenu de la table `membre`
    --
     
    INSERT INTO `membre` (`id`, `login`, `pass`, `email`, `hash`, `actif`) VALUES
    (1, 'admin', 'ea5c1fa6787ae6e7e9ccefd0f33a31e032b518dc', 'admin@admin.fr', '', 0),
    (20, 'virginie', '9f26a7e30c11faa76d3172144c94f8d0bb891cf6', 'lavalettevirginie87@voila.fr', '084b6fbb10729ed4da8c3d3f5a3ae7c9', 0);
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `tournoi`
    --
     
    CREATE TABLE IF NOT EXISTS `tournoi` (
      `id` int(5) NOT NULL AUTO_INCREMENT,
      `DateDebut` varchar(20) NOT NULL,
      `Lieu` varchar(255) NOT NULL,
      `NbRonde` varchar(2) NOT NULL,
      `NbMaxInscrit` int(50) NOT NULL,
      `TournoiClos` varchar(5) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=23 ;
     
    --
    -- Contenu de la table `tournoi`
    --
     
    INSERT INTO `tournoi` (`id`, `DateDebut`, `Lieu`, `NbRonde`, `NbMaxInscrit`, `TournoiClos`) VALUES
    (8, '23-07-2011', 'lamotte', '12', 121221, 'oui'),
    (11, '27-08-2010', 'limoges', '4', 12, 'oui'),
    (12, '27-08-2010', 'bellac', '4', 12, 'oui'),
    (13, '27-08-2010', 'peyrat', '', 12, 'oui'),
    (14, '27-08-2010', 'mezieres', '4', 12, 'oui'),
    (16, '27-08-2010', 'dinsac', '4', 12, 'oui'),
    (17, '27-08-2010', 'dorat', '4', 12, 'oui'),
    (18, '25/12/2011', 'varetz', '5', 20, 'oui'),
    (19, '12/12/2012', 'chaumont', '7', 6, 'oui'),
    (20, '02/06/2011', 'chaon', '8', 24, 'non'),
    (21, '08/09/2010', 'vouzon', '9', 52, 'non'),
    (22, '05/05/2010', 'orleans', '5', 26, 'oui');
     
    --
    -- Contraintes pour les tables exportées
    --
     
    --
    -- Contraintes pour la table `inscription`
    --
    ALTER TABLE `inscription`
      ADD CONSTRAINT `inscription_ibfk_1` FOREIGN KEY (`Lieu`) REFERENCES `tournoi` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
      ADD CONSTRAINT `inscription_ibfk_2` FOREIGN KEY (`Joueur`) REFERENCES `joueur` (`NumLicence`) ON DELETE CASCADE ON UPDATE CASCADE;

  10. #50
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    M'en vais illico chercher une corde, et me pendre

    Nom mais, je t'avais poser la question si la table inscription contenait "mezieres", et tu m'avais répondu que oui.
    Je t'avais même suggérer de plutôt utilser des IDs, aucune réaction de part.

    Maintenant je constate que c'est finalement des IDs.



    Franchement, faut pas faire truc pareil.
    Faut que tu opte vraiment sur des règles d'écriture, aussi bien en SQL qu'en Php.
    Un champ contenant un Identifiant, on le nomme : champ_id (ou id_champ), donc ici, si ton champ avait comme nom lieu_id, tout le monde aurait vu le problème.
    Le problème c'est qu'on recherche "mezieres" dont aucune des 2 tables ne contiennent ce nom.


    Mais à quoi correspondent les Identifiant du champ Lieu, à quelle table ?
    La table tournois je suppose ?

    Si c'est le cas, alors il faudrait remplacer dans le menu déroulant l'attribut value, et mettre l'ID (champ "id" de la table "tournois") au lieu de celui du champ "Lieu".
    La recherche se fera alors sur cet ID, ceci devrait résoudre le problème.


    N'empêche que les termes utiliser ne sont pas tout as fait exactes, car ici, ce n'est pas un lieu qui est recherché, mais un tournois.
    Il ne faudrait pas utiliser comme nom "Lieu" dans cette table "inscription", mais "tournois_id".
    Et dans la table "tournois", utiliser "tournois_id" comme nom pour la clé primaire (au lieu de "id").
    Là, les choses deviennent plus clairs.

    Pour résoudre les problème de nom de champs identiques dans 2 tables, faut exploiter les alias.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  11. #51
    Débutant Avatar de VIRGINIE87
    Femme Profil pro
    Sans Emploi
    Inscrit en
    Avril 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Points : 72
    Points
    72
    Par défaut
    Mais à quoi correspondent les Identifiant du champ Lieu, à quelle table ?
    La table tournois ?


    Si c'est le cas, alors il faudrait remplacer dans le menu déroulant l'attribut value, et mettre l'ID au lieu du nom (Lieu).

    N'empêche que les termes utiliser ne sont pas tout as fait exactes, car ici, ce n'est pas un lieu qui est recherché, mais un tournois.
    Il ne faudrait pas utiliser comme nom "Lieu" dans cette table "inscription", mais "tournois_id".
    Et dans la table "tournois", utiliser "tournois_id" comme nom pour la clé primaire (au lieu de "id").
    Là, les choses deviennent plus clairs.

    Pour résoudre les problème de nom de champs identiques, faut exploiter les alias.
    les identifiants du champs Lieu dans la table inscription correspondent à ceux de la table tournoi

  12. #52
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par VIRGINIE87 Voir le message
    les identifiants du champs Lieu dans la table inscription correspondent à ceux de la table tournoi
    Ok.
    Et bien modifie le menu déroulant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<option value="'.$row["id"].'">'.$row["lieu"].' </option>';
    Mais sérieux, faudrait corriger certains nom de champs, parce que c'est tout sauf intuitif, alors que la règle d'or en programmation, c'est justement utiliser des noms explicites.
    Un seul coup d'oeil suffit à savoir ce que contient un champ d'un Bdd, une variable, etc ...
    Si c'est l'inverse que ça produit, alors ce n'est pas bon.

    D'ailleurs, et pour exemple, dans le code ci-dessus, $row ça ne veut rien dire, tout juste dire que c'est une ligne.
    Si tu utilise $tournois à la place, on sait que ce sont des tournois, le code devient plus compréhensible, et par tout le monde (les codeurs).
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  13. #53
    Débutant Avatar de VIRGINIE87
    Femme Profil pro
    Sans Emploi
    Inscrit en
    Avril 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Points : 72
    Points
    72
    Par défaut
    cela fonctionne

    mais il me reste une dernière chose à régler c'est que je souhaite intégrer un système de pagination, j'ai déjà réaliser cela pour d'autres pages mais la le soucis que je rencontre est au niveau de la requete

Discussions similaires

  1. [MySQL] Problème de jointure pour une requête
    Par HAbroc dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 31/08/2014, 13h05
  2. problème de jointure pour archivage
    Par doudou8mc dans le forum Développement
    Réponses: 1
    Dernier message: 07/10/2009, 14h57
  3. Problème pour inscrire une dll
    Par aloisio11 dans le forum Windows
    Réponses: 0
    Dernier message: 22/04/2008, 09h30
  4. [MySQL] Problème avec les jointure pour un menu
    Par Glocman dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 31/07/2006, 17h44
  5. Problème de jointure pour affichage "speciale"
    Par webjeux dans le forum Requêtes
    Réponses: 3
    Dernier message: 22/06/2006, 12h23

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