2015-08-06 1 views
0

Je:multiples lorsque les tables jointure interne ont la colonne avec le même nom

SELECT * FROM products 
    INNER JOIN cat1 ON products.maincategory=cat1.rid 
    INNER JOIN cat2 ON products.cat2=cat2.rid 

Il affiche toutes les informations très bien, mais si je echo $row_rsProducts['category'] je n'ai pas moyen de savoir si la catégorie est de la table cat1 ou d'une table cat2. Comment puis-je réparer cela?

enter image description here

+0

maintenant votre image et requête n'a aucun sens rien ne correspond :) ... mais en ce qui concerne votre écho ... vous devriez quand 'select' donner un alias .. par exemple. sélectionnez p.id comme ID_produit, etc ... puis faites écho en utilisant l'alias, c'est-à-dire product_id – MrSimpleMind

+0

Votre code serait plus facile à lire avec le formatage. Vérifiez le bouton avec "{}" dessus. – aemxdp

+1

duplication possible de [MySQL INNER JOIN Alias] (http://stackoverflow.com/questions/10724324/mysql-inner-join-alias) –

Répondre

0

par ne pas utiliser SELECT * mais désigner nommément les colonnes et de donner un alias à chacun des mêmes colonnes nommées ou les référencer par table et nom de la colonne

1

Vous devez donner l'alias des éléments qui viennent de cat1 et cat2:

SELECT products.*, 
     manufacturer.*, 
     cat1.rid as c1rid, 
     cat1.category as c1category, 
     ifnull(cat2.rid,'') as c2rid, 
     ifnull(cat2.category,'') as c2category 
FROM products 
INNER JOIN manufacturer ON products.manufacturer=manufacturer.rid 
INNER JOIN cat1 ON products.maincategory=cat1.rid 
LEFT OUTER JOIN cat2 ON products.cat2=cat2.rid 

et que les utiliser comme ceci: echo $row_rsProducts['c1category']

+0

Merci Fabien qui l'a fait. – user4367436

+0

seul problème que je viens de réaliser est que si cat2 est NULL ou vide, il ne montrera pas l'enregistrement. Y'a t'il un moyen d'arranger cela? – user4367436

+0

Vous devez remplacer 'INNER JOIN' par un' LEFT OUTER JOIN' et utiliser la fonction 'IFNULL' pour afficher la valeur emply au lieu de null dans l'instruction' SELECT'. Vérifiez à nouveau ma réponse. –