[RESOLU] Clé étrangère

Eléphanteau du PHP | 13 Messages

07 févr. 2014, 19:08

Salut,
bon le titre est un peu vague, mais voilà mon soucis:
J'ai une table typeproduit, et une table formule.
Dans la table typeproduit, j'ai les champs: NomTypeProduit, IdTypeProduits et d'autres pas important
Dans la table formule, j'ai les champs: IdFormule, NomFormule, IdTypeProduit1, IdTypeProduit2 qui font tous les deux référence à IdTypeProduit de la table typeproduit.
Maintenant, je désirerais faire une requête comme celle ci:
SELECT formule.NomFormule, formule.PrixFormule, typeproduit.NomTypeProduit FROM formule INNER JOIN typeproduit ON (typeproduit.IdTypeProduit=formule.IdTypeProduit1) AND (typeproduit.IdTypeProduit=formule.IdTypeProduit2);
Cependant, j'ai un résultat vide alors que normalement je devrais avoir un résultat, j'ai essayé éégalement avec des WHERE et en supprimant les contraintes de clé étrangère, et pareil, aucun résultat...

ViPHP
xTG
ViPHP | 7331 Messages

07 févr. 2014, 19:15

Ce n'est pas plutôt un OR à la place d'un AND que tu souhaiterai ?

Eléphanteau du PHP | 13 Messages

07 févr. 2014, 19:46

Merci de ta réponse. Mais malheureusement non, les deux conditions doivent être vérifiés. Je vais expliquer plus en détail:
J'ai une table typeproduit, qui contient les champs: IdTypeProduit (clé primaire en auto-incrément) et NomTypeProduits (par exemple, plats chauds, accompagnements ou encore boisson se trouvent dans ce champs).
J'ai une table formule, qui contient elle IdTypeProduit1, IdTypeProduit2, qui font référence tous deux à IdTypeProduit de la table typeproduit. (par exemple, IdTypeProduit1 et IdTypeProduit2 contiennent 1 et 2, dans la table typeproduit, ces deux valeurs correspondent à plats chauds et accompagnements.

Avec une requête, je veux afficher la liste des formules et les nom qui correspondent aux IdTypeProduit1 et IdTypeProduit2 de la table typeproduits (les noms sont stockés dans la table typeproduit).
J'espère être clair!

ViPHP
xTG
ViPHP | 7331 Messages

07 févr. 2014, 20:32

C'est donc une double jointure qu'il te faut.
SELECT formule.NomFormule, formule.PrixFormule, t1.NomTypeProduit, t2.NomTypeProduit
FROM formule 
   INNER JOIN typeproduit AS t1 
      ON (t1.IdTypeProduit=formule.IdTypeProduit1) 
   INNER JOIN typeproduit AS t2 
      ON (t2.IdTypeProduit=formule.IdTypeProduit2);

Eléphanteau du PHP | 13 Messages

07 févr. 2014, 22:04

Merci! Effectivement c'est bien sa! Plutôt simple mais j'ignorais que l'on pouvais faire deux jointures comme sa, je pensais que le AND suffirait! Bon ba le problème est résolu, merci à toi!

Eléphanteau du PHP | 13 Messages

07 févr. 2014, 22:34

Par contre l'intégrer en php c'est possible? Car dans la boucle qui liste les résultats envoyés par la requête, je ne peux pas faire 'echo $donnees['t1.NomTypeProduit']' mais seulement 'echo $donnees['NomTypeProduit'], ce qui me renvoi uniquement la valeur de t2:
<?php
						$sql = $bdd->query("SELECT formule.NomFormule, formule.PrixFormule, t1.NomTypeProduit, t2.NomTypeProduit, t3.NomTypeProduit, t4.NomTypeProduit
						FROM formule
						INNER JOIN typeproduit AS t1 ON ( t1.IdTypeProduit = formule.IdTypeProduit1 ) 
						INNER JOIN typeproduit AS t2 ON ( t2.IdTypeProduit = formule.IdTypeProduit2 )
						INNER JOIN typeproduit AS t3 ON ( t3.IdTypeProduit = formule.IdTypeProduit3 )
						INNER JOIN typeproduit AS t4 ON ( t4.IdTypeProduit = formule.IdTypeProduit4 )");
						
						 while ($data = $sql->fetch())
						 {
						 echo $data['NomFormule']; ?> <br> <?php
						 echo $data['t1.NomTypeProduit']; echo $data['t2.NomTypeProduit']; echo $data['t3.NomTypeProduit']; echo $data['t4.NomTypeProduit'];
						 
						
						 
						 }


						
						
						
						
						?>

ViPHP
xTG
ViPHP | 7331 Messages

07 févr. 2014, 23:21

Renommes les champs avec le AS (comme je l'ai fait pour les tables).

Eléphanteau du PHP | 13 Messages

16 févr. 2014, 23:14

Désolé du temps de réponse, j'était occupé ces dernier temps! Mais merci à toi, effectivement je pensais pas que les alias pouvaient avoir une autre utilité que celle d'avoir la flemme de réécrire le nom d'un table dans une requête :)
Résolu!