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] Ca m'extrait deux fois l'entrée alors qu'il y a en qu'une [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 163
    Par défaut [Jointure] Ca m'extrait deux fois l'entrée alors qu'il y a en qu'une
    Bonjour,

    Je me débroille (en tant que novice) mais la je bloque et je ne comprends pas pourquoi.

    J'ai deux tables tb_objets et tb_objets_has_tb_equipment_objet:
    tb_objets
    -- id_objet
    -- fd_numero_objet
    -- fd_autre_colone
    tb_objets_has_tb_equipment_objet
    -- tb_objets_id_objet
    -- tb_equipment_objet_id_equipment
    Dans mon cas, j'ai plusieurs objets dans ma table "tb_objets" qui ont un "id_objet" unique. C'est a dire qu'il n'y a pas de doublons.

    Dans l'autre table j'ai qu'un objet qui a des équipement. C'est l'objet qui a l'id 8. Donc ma table "tb_objets_has_tb_equipment_objet", j'ai deux lignes:
    La premiere ligne a
    tb_objets_id_objet =8
    tb_equipment_objet_id_equipment = 22
    tb_objets_id_objet =8
    tb_equipment_objet_id_equipment = 26
    J'ai besoin d'afficher tous les équipements de l'objet qui a l'ID 8.

    Pour cela j'ai fait une jounture comme ceci
    Code PHP : 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
     
    $id=8;
    $sql_mod = "SELECT * FROM tb_objets 
    	INNER JOIN tb_objets_has_tb_equipment_objet ON tb_objets.id_objet=tb_objets_has_tb_equipment_objet.tb_objets_id_objet
    	WHERE tb_objets.id_objet LIKE ".$id;
    	$query_mod =  mysql_query($sql_mod)or die(mysql_error());
    	$nb_mod = mysql_num_rows($query_mod);
     if($nb_mod){
    	while($data_mod = mysql_fetch_assoc($query_mod)){		
    	?>
    	<fieldset><legend>Modification de objet id: <?php echo $data_mod['id_objet']; ?></legend>		
    	<?php
    	echo 'a l\'équipement :';
    	echo $data_mod['tb_equipment_objet_id_equipment'];
    	echo '<br>';			#include($root.'include/manage_objets_add_mod.form.php');
    	?>
    	</fieldset>
    	<?php
    	}
     }else{
    	echo 'magage.objet.mod.iframe : error, no record';
    }
    J'ai aussi essayé LEFT JOIN, RIGHT JOIN, mais sans succès.

    Je ne comprends pas pourquoi il y a deux <fieldset> avec l'i 8, qui s'affiche car j'ai qu'un objet qui a l'ID 8 qui est enregistré dans la table "tb_objets"


    Comment puis-je corriger ma requete pour que j'aie un <fieldset> avec l'ID 8 et à l'intérieur, les deux equipement 22 et 26???

    Merci pour votre aide

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 163
    Par défaut
    Je me demande si je dois faire une jointure, dans ce cas et si je ne devrais pas mieux faire en faisant une nouvelle requete à ma table "tb_objets_has_tb_equipment_objet", dans le while(){}...

  3. #3
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    fastoche.

    tu sors le <fieldset> de la boucle.

    évite de mélanger l'anglais et le fr dans une interface utilisateur

  4. #4
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonjour,

    tout d'abord une remarque : utiliser = au lieu de LIKE dans ta requête, ce sera probablement plus rapide et surtout plus compréhensible ici.

    Sinon, en effet le LEFT et RIGHT JOIN vont retourner la même chose puisque l'id 8 se trouve dans les 2 tables. Dans ce cas de figure, un INNER OU LEFT/RIGHT retourne la même chose.

    Sinon, trivialement, il suffit de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP BY tb_equipment_objet_id_equipment
    sur la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tb_objets_has_tb_equipment_objet où tb_objets_id_objet = 8

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

Discussions similaires

  1. surcharger deux fois le même opérateur
    Par Tex-Twil dans le forum C++
    Réponses: 2
    Dernier message: 01/12/2005, 19h45
  2. [SQL] Requete me renvoyant deux fois le meme nom
    Par Pepito dans le forum Langage SQL
    Réponses: 9
    Dernier message: 14/10/2005, 14h35
  3. Lire deux fois un inputstream
    Par Guybrush dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 05/09/2005, 14h50
  4. Réponses: 14
    Dernier message: 30/03/2005, 21h50
  5. Sélectionner un même enregistrement deux fois...
    Par Manu0086 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 02/02/2004, 13h09

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