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 de jointure [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 95
    Points : 24
    Points
    24
    Par défaut Problème de jointure
    Hello,

    J'ai un petit prob de jointure :

    global $db2;

    if (isset($_SESSION['artid'])){//edit mode
    $query="SELECT a.id,a.rc_id,a.brand_id,a.target_id,a.item_description,a.item_trax,a.item_id,a.item_price,a.item_pic,a.item_pic1,a.item_pic2,a.item_pic3,a.item_comment,
    a.item_ftech,a.item_dia,a.item_nosell,a.item_new,a.item_special FROM cms_shop_items a LEFT JOIN cms_shop_model b ON a.target_id=b.id
    WHERE a.id=".$_SESSION['artid'];
    $db->query($query);
    $db->next_record();
    $nosell=$newitem='';
    if ($db->f('item_nosell')==1) $nosell='checked';
    if ($db->f('item_new')==1) $newitem='checked';
    if ($db->f('item_special')==1) $itemspecial='checked';

    $query="SELECT brand.brandname, model.descr, model.trax, model.year FROM cms_shop_brand brand, cms_shop_partmodel pm, cms_shop_items item, cms_shop_model model
    WHERE item.item_trax=model.trax AND rc_brand='1' AND model.brand_id=brand.id AND pm.model_id=model.id=".tosql($_SESSION['artid'])." ORDER BY brand.brandname DESC";
    $targetmodellist='';
    $db2->query($query);
    $result = mysql_query($query);
    $nb = mysql_num_fields($result);
    if ($nb!=0){
    }
    while($db2->next_record()){
    $targetmodellist.='<option>'.$db2->f('brand_id').'&nbsp;'.$db2->f('descr').'&nbsp;'.$db2->f('year').'&nbsp;'.$db2->f('trax').'</option>';
    }

    Donc je souhaite afficher une jointure d'une base deux champs l'un est : model.trax qui indique une taille d'un model lors de la session et l'autre qui est le champs item_trax qui indique la meme taille dans le : $targetmodellist sauf que il m'affiche plusieurs fois le meme modele dans cette liste comment faire pour que il me donne qu'une fois ce qu'il y a dans le champs?
    Merci d'avance

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Lut !

    !!

    ton code est illisible, de plus, s'il s'agit uniquement de la jointure, c'est un problème qui concerne MySQL ou le langage SQL, pas PHP...

    et formatte un peu tes requêtes SQL, avec un quelques retours à la ligne et un peu d'indentation, c'est totalement illisble là...

    Merci
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 95
    Points : 24
    Points
    24
    Par défaut suite jointure
    $query="SELECT brand.brandname, model.descr, model.trax, model.year FROM cms_shop_brand brand, cms_shop_partmodel pm, cms_shop_items item, cms_shop_model model
    WHERE item.item_trax=model.trax AND rc_brand='1' AND model.brand_id=brand.id AND pm.model_id=model.id=".tosql($_SESSION['artid'])." ORDER BY brand.brandname DESC";
    $targetmodellist='';
    $db2->query($query);
    $result = mysql_query($query);
    $nb = mysql_num_fields($result);
    if ($nb!=0){
    }

    Est - ce que la ca c plus lisible, le fait est que j'ai la table cms_shop_items qui un champ item_trax qui contient une valeur introduit dans une session qui affiche par exemple 5x120, valeur que je voudrais afficher en jointure avec celle qui contient dans la meme table cms_shop_model model dans le champ trax, la meme valeur, alors elle affiche bien la valeur commune au model listé dans la table cms_shop_model model, sauf qu'elle me l'affiche plusieurs fois, donc ce que je souhaite savoir c'est comment faire pour limiter la multiplication de la meme valeur?
    c'est pas evident d'expliquer mon probleme, j'avous, désolé

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    tant que tu n'utilisera pas les balises code (le #) et que tu ne formattera pas tes requêtes SQL, ça sera peu ou pas lisible...

    de plus j'ai du mal à comprendre tes explication, le mieux serait que tu donne les requêtes CREATE TABLE pour tes tables, ainsi qu'un petit jeu d'enregistrement (avec des insertions) et le resultat attendu avec ces exemples...

    de plus, comme je l'ai dit, ça semble (pour ce que j'en ai compris) concerner MySQL/SQL et non PHP
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 95
    Points : 24
    Points
    24
    Par défaut resuite
    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
    Structure de la table `cms_shop_items`
    -- 
     
    CREATE TABLE `cms_shop_items` (
      `id` smallint(5) unsigned NOT NULL auto_increment,
      `rc_id` smallint(5) unsigned NOT NULL default '0',
      `brand_id` tinyint(4) unsigned NOT NULL default '0',
      `target_id` tinyint(3) unsigned NOT NULL default '0',
      `item_description` text,
      `item_trax` varchar(7) NOT NULL default '',
      `item_id` varchar(30) NOT NULL default '',
      `item_price` varchar(7) NOT NULL default '0.00',
      `item_pic` varchar(50) NOT NULL default 'nopic.gif',
      `item_pic1` varchar(50) NOT NULL default 'spacer.gif',
      `item_pic2` varchar(50) NOT NULL default 'spacer.gif',
      `item_pic3` varchar(50) NOT NULL default 'spacer.gif',
      `item_comment` varchar(50) default '',
      `item_ftech` text,
      `item_dia` tinyint(3) unsigned default NULL,
      `item_nosell` tinyint(4) NOT NULL default '0',
      `item_new` tinyint(1) unsigned NOT NULL default '0',
      `item_special` tinyint(1) unsigned NOT NULL default '0',
      PRIMARY KEY  (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=127 ;
     
    -- 
    -- Contenu de la table `cms_shop_items`
    -- 
     
     
    INSERT INTO `cms_shop_items` VALUES (91, 8, 11, 6, 'Mag PPG A', '5x120', '16PPGA', '120', '5.gif', 'spacer.gif', 'spacer.gif', 'spacer.gif', NULL, NULL, 17, 0, 1, 0);
    INSERT INTO `cms_shop_items` VALUES (92, 8, 11, 6, NULL, '5x120', '', '', '6.gif', 'spacer.gif', 'spacer.gif', 'spacer.gif', NULL, NULL, 16, 0, 0, 0);
    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
     
    -- 
    -- Structure de la table `cms_shop_model`
    -- 
     
    CREATE TABLE `cms_shop_model` (
      `id` smallint(5) unsigned NOT NULL auto_increment,
      `brand_id` smallint(5) unsigned NOT NULL default '0',
      `descr` varchar(50) NOT NULL default '',
      `trax` varchar(7) NOT NULL default '',
      `year` varchar(4) NOT NULL default '2005',
      `pic_white` varchar(50) NOT NULL default 'nomodel.gif',
      `pic_black` varchar(50) NOT NULL default 'nomodel.gif',
      `pic_grey` varchar(50) NOT NULL default 'nomodel.gif',
      `pic_red` varchar(50) NOT NULL default 'nomodel.gif',
      `x1` smallint(4) unsigned NOT NULL default '162',
      `y1` smallint(4) unsigned NOT NULL default '162',
      `x2` smallint(4) unsigned NOT NULL default '463',
      `y2` smallint(4) unsigned NOT NULL default '162',
      PRIMARY KEY  (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=89 ;
     
    -- 
    -- Contenu de la table `cms_shop_model`
    -- 
     
    INSERT INTO `cms_shop_model` VALUES (1, 2, 'A4 CABRIOLET', '', '2005', 'nomodel.gif', 'nomodel.gif', 'nomodel.gif', 'nomodel.gif', 162, 162, 463, 162);
    INSERT INTO `cms_shop_model` VALUES (2, 2, 'A4 AVANT', '', '2005', 'nomodel.gif', 'nomodel.gif', 'nomodel.gif', 'nomodel.gif', 162, 162, 463, 162);
    La j'ai 2 valeur qui sont les memes dans item trax et dans trax et que je veux afficher mais dans ma balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	$query="SELECT brand.brandname, model.descr, model.trax, model.year FROM cms_shop_brand brand, cms_shop_partmodel pm, cms_shop_items item, cms_shop_model model 
    	WHERE item.item_trax=model.trax AND rc_brand='1' AND model.brand_id=brand.id AND pm.model_id=model.id=".tosql($_SESSION['artid'])." ORDER BY brand.brandname DESC";
    	$targetmodellist='';
    	$db2->query($query);
    	$result = mysql_query($query);
        $nb = mysql_num_fields($result);
    if ($nb!=0){
    }
    	while($db2->next_record()){
    	 $targetmodellist.='<option>'.$db2->f('brand_id').'&nbsp;'.$db2->f('descr').'&nbsp;'.$db2->f('year').'&nbsp;'.$db2->f('trax').'</option>';
    	}
    il s'affiche en plusieurs fois au lieu de me donner qu'une lsite de modele , il me donne six fois la meme liste, j'espere que tu me cerne car cela fait 2 jours que je suis dessus, je te remercis d'avance

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 95
    Points : 24
    Points
    24
    Par défaut [SGBD] Problème de jointure externe
    En fait c'est un variable de session qui c'est afficher que je veux recuperer afin de faire une jointure externe qui correspond a un champs de la table cms_shop_model pour dire que l'info coorespond a des models lier par le champ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $query="SELECT brand.brandname, model.descr, model.trax, model.year FROM cms_shop_brand brand, cms_shop_partmodel pm, FROM cms_shop_model model LEFT JOIN cms_shop_items item ON model.trax=item.item_trax
    	WHERE model.trax=".$_SESSION['artid'];
    	$targetmodellist='';
    	$db2->query($query);
    	$result = mysql_query($query);
        $nb = mysql_num_fields($result);
    if ($nb!=0){
    }
    	while($db2->next_record()){
    	 $targetmodellist.='<option>'.$db2->f('brand_id').'&nbsp;'.$db2->f('descr').'&nbsp;'.$db2->f('year').'&nbsp;'.$db2->f('trax').'</option>';
    	}
    Aussi, j'aimerais vraiment que vous m'aidiez a en finir avec ca, ce que je souhaite c tout simplement afficher en une fois une info commune qui correspond a une table

  7. #7
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    y'a 2 from dans ta requête etc... en plus ça sent le double post...

    comme je te l'ai dit (il me semble) essaie de formater un peu ta requête du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT champ1, champ2, ....
    FROM tbl
    <div style="margin-left:40px">JOIN tbl2
    <div style="margin-left:40px">ON tbl1.id = tbl2.id_1</div></div>WHERE champX = 5
    ça aidera à la comprendre et donne les requêtes pour créer tes tables, des enregistrements exemples et le résultat souhaité pour ces exemples....
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    Pourquoi t'utilise pas une clé étrangere....ça simplifiérais grandement tes requetes..et assurerais l'intégrite de ta base
    Stay in Bed .. Save Energy

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 95
    Points : 24
    Points
    24
    Par défaut probleme de jointure suite
    Bon comme je disais il fallait que je recupere une variable de sssion, donc j'ai enfin reussi, mais merci les amis voici la modif:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	$query="SELECT model.descr, model.trax, model.year FROM  cms_shop_model model 
          WHERE model.trax='".$db->f('item_trax')."' ORDER BY descr";
    	$targetmodellist='';
    	$db2->query($query);
    	$result = mysql_query($query);
        $nb = mysql_num_fields($result);
    if ($nb!=0){
    }
    @+ clovis

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

Discussions similaires

  1. Problème de jointure de tables
    Par AurelBUD dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/04/2005, 16h27
  2. Probléme de jointure
    Par Ajrarn dans le forum Langage SQL
    Réponses: 14
    Dernier message: 24/02/2005, 14h57
  3. Vraisemblable problème de jointure
    Par pimousse76 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/02/2005, 15h34
  4. [MS Access] Problème de jointure
    Par Erakis dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/02/2005, 21h15
  5. Problème de jointure ?!
    Par ebaynaud dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/11/2004, 11h27

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