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 :

jointure LEFT JOIN [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 110
    Points : 57
    Points
    57
    Par défaut jointure LEFT JOIN
    Bonjour,

    J'ai un petit souci sur un "left join" qui sur une de mes requêtes ne fonctionnent pas alors que dans une autre, il n'y a pas de problèmes...
    Je ne comprends pas d'ou peut venir le bug, ci-joint le contenu de ma requête défectueuse. A noter qu'elle ne m'indique aucun message d'erreur...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $sql->DatabaseConnexion();
    $aff_joueurs = $sql->query("SELECT * FROM "._TJOUEURS_." LEFT JOIN "._TPOSITIONS_." ON "._TJOUEURS_.".id_position = "._TPOSITIONS_.".id_position_joueurs ".$end_query )  or die(mysql_error()); 
    $sql->DatabaseClose();
     
    while($results = mysql_fetch_array($aff_joueurs,MYSQL_ASSOC)) {
    	$tpl->assign_vars(array(
    					'ID_JOUEUR' => $results['id_joueur'],
    					'NOM' => $results['nom'],
    					'PRENOM' => $results['prenom'],
    					'ID_POSITION' => $results['id_position']
    					));
    }
    Dans la requête qui fonctionne, mon chiffre "id" se transforme bien en texte. Sur celle-ci, j'ai toujours dans ma zone de texte le chiffre de "l'id" sans avoir son remplacement par le mot correspondant.

    D'où peut venir le souci?
    Merci d'avance.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Dans ton code il n'y a aucun "id" (mais un "id_joueur" et un "id_position") ni de zone de texte alors il va être bien difficile de t'aider.
    A première vue, la requête est correcte.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 110
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Dans ton code il n'y a aucun "id" (mais un "id_joueur" et un "id_position") ni de zone de texte alors il va être bien difficile de t'aider.
    A première vue, la requête est correcte.
    Afin d'être un peu plus clair, voici la composition de mes tables.

    Table joueurs:

    `id_joueur` int(30) NOT NULL,
    `nom` varchar(55) NOT NULL,
    `prenom` varchar(55) NOT NULL,
    `id_position` tinyint(6) NOT NULL,

    Table positions:

    `id_position_joueurs` tinyint(6),
    `poste` varchar(55) NOT NULL,

    Je reposte ma requête afin d'avoir tout,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $sql->DatabaseConnexion();
    $aff_joueurs = $sql->query("SELECT * FROM "._TJOUEURS_." LEFT JOIN "._TPOSITIONS_." ON "._TJOUEURS_.".id_position = "._TPOSITIONS_.".id_position_joueurs ".$end_query )  or die(mysql_error()); 
    $sql->DatabaseClose();
     
    while($results = mysql_fetch_array($aff_joueurs,MYSQL_ASSOC)) {
    	$tpl->assign_vars(array(
    					'ID_JOUEUR' => $results['id_joueur'],
    					'NOM' => $results['nom'],
    					'PRENOM' => $results['prenom'],
    					'ID_POSITION' => $results['id_position']
    					));
    }

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Et tu cherches à avoir quoi exactement ?

    Ce qui m'étonne dans ta requête, c'est que tu fais une jointure mais que tu ne t'en sers pas : tu ne prends que les valeurs de la première table et tu ne te sers pas de la seconde.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 110
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Et tu cherches à avoir quoi exactement ?

    Ce qui m'étonne dans ta requête, c'est que tu fais une jointure mais que tu ne t'en sers pas : tu ne prends que les valeurs de la première table et tu ne te sers pas de la seconde.

    Actuellement sur une page d'un joueur, j'ai par exemple:

    Poste: 5 au lieu d'avoir Poste: Attaquant

    Ce que je ne comprend pas, c'est que sur une requête similaire qui est utilisé pour les clubs, tout fonctionne et elle est base sur le même shéma...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $sql->DatabaseConnexion();
    $aff_carriere = $sql->query("SELECT * FROM "._TCARRIERE_." LEFT JOIN "._TCLUBNOM_." ON "._TCARRIERE_.".id_club = "._TCLUBNOM_.".id_clubs_nom ".$end_query." ORDER by saison ASC")  or die(mysql_error()); 
    $sql->DatabaseClose();
     
    while($results = mysql_fetch_array($aff_carriere,MYSQL_ASSOC)) {
    	$tpl->assign_block_vars('carriere', array(
    					'ID_JOUEUR' => $results['id_joueur'],
    					'CLUB' => $results['club'],
    					));
    }
    Avec,
    Table club:

    `id_clubs_nom` int(30) NOT NULL auto_increment,
    `club` varchar(55) NOT NULL,

    Table carrière:

    `id_joueur` tinyint(6) NOT NULL,
    `id_club` tinyint(6) NOT NULL,

    A l'aperçu j'ai bien
    Club: NomDuClub et pas un chiffre comme ci-dessus...

    Donc c'est la que je ne comprend pas, sur une requête, ça fonctionne et pas sur une autre...

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Dans la requête qui marche, tu utilises bien le nom du club :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'CLUB' => $results['club']
    Alors que dans la requête qui ne donne pas le résultat souhaité, tu demandes l'id_position :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'ID_POSITION' => $results['id_position']
    Je te mets le nez sur l'erreur, à toi de la corriger maintenant !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 110
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Dans la requête qui marche, tu utilises bien le nom du club :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'CLUB' => $results['club']
    Alors que dans la requête qui ne donne pas le résultat souhaité, tu demandes l'id_position :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'ID_POSITION' => $results['id_position']
    Je te mets le nez sur l'erreur, à toi de la corriger maintenant !
    Mais quel âne...
    Pourtant, j'en ai fait des manips... sauf celle-là.

    Merci à toi en tout cas !

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

Discussions similaires

  1. Jointure LEFT JOIN avec Double COUNT
    Par Mike91 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/03/2015, 12h37
  2. [2.x] twig et jointure (left join)
    Par wilson2 dans le forum Symfony
    Réponses: 1
    Dernier message: 13/02/2013, 16h44
  3. Réponses: 1
    Dernier message: 06/11/2008, 09h51
  4. Réponses: 6
    Dernier message: 23/01/2007, 10h17
  5. [LEFT JOIN] Condition de jointure bizzare
    Par Celelibi dans le forum Requêtes
    Réponses: 7
    Dernier message: 17/05/2005, 18h38

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