jointure deficiente

Eléphanteau du PHP | 25 Messages

08 mars 2006, 12:25

Salut !
J'ai un peu de mal avec les jointures:
Voici ma requete de table pour afficher les fonctions et leurs types :

Code : Tout sélectionner

$query1= "SELECT f.id_fonction, f.fonction,f.id_type, t.id_type, t.type FROM fonction f, type t WHERE f.id_type = t.id_type "; $resul = mysql_query($query1) or die ("Requete '$query1' impossible"); if(mysql_num_rows($resul)==0){ print"<h2>Aucune fonction dans la base\n</h2>";
}.......Il y a des fonctions dans la table et cela me renvoie "aucune fonction..."
Ceci c'est la requete de formulaire :

Code : Tout sélectionner

$query1= "SELECT f.id_fonction, f.fonction, f.id_type, t.id_type, t.type FROM fonction f, type t WHERE f.id_type = t.id_type "; En fait je veux afficher le type donc dans mon form je fais cela : <select name="id_type" > <?php $query = " SELECT id_type, type FROM type order by type "; $resul = mysql_query($query) or die ("Requete '$query' pas possible"); while($row = mysql_fetch_array($resul)) { print"<option value=".$row[id_type].">".$row[type]."</option>"; }?> </select>
si je fais une requete toute simple style "select* from fonction order by id_fonction";
Bon la cela marche. Cela deco...a partir du moment ou je mets en place $query1 !
Je vous remercie par avance[/code]

Mammouth du PHP | 568 Messages

08 mars 2006, 12:37

1èrement, quand tu donnes un nom à table dans une requête, il faut utiliser AS...

exmple :

Code : Tout sélectionner

SELECT * FROM table [b]AS[/b] t
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 mars 2006, 12:48

1èrement, quand tu donnes un nom à table dans une requête, il faut utiliser AS...
Ce n'est pas utile pour le nom des tables, l'alias se fait très bien sans. C'est nécessaire en revanche pour le nom des champs. :)

La syntaxe de ta requête est bonne, tu dois d'ailleurs pouvoir la tester avec phpMyAdmin pour la vérifier. En revanche, pour qu'elle te ramene des résultat, cela implique qu'il doit forcément y avoir un id_type dans la table type associé à ta fonction. S'il n'y en a pas, c'est qu'aucune fonction ne répond à ta condition et donc pas de résultat.

Si tu veux ramener des lignes, même lorsqu'il n'y a pas de correspondance dans type, il faut utiliser une jointure externe :
$query1= "SELECT f.id_fonction, f.fonction, f.id_type, t.id_type, t.type ";
$query1.= "FROM fonction f LEFT OUTER JOIN type t ON f.id_type = t.id_type "; 
(Nota : f.id_type et t.id_type te retourneront le même résultat vu ta condition, ce n'est donc pas utile de ramener les deux :))

Mammouth du PHP | 568 Messages

08 mars 2006, 12:51

1èrement, quand tu donnes un nom à table dans une requête, il faut utiliser AS...
Ce n'est pas utile pour le nom des tables, l'alias se fait très bien sans. C'est nécessaire en revanche pour le nom des champs. :)
Ouaip me suis fais eu sur ce coup ! C'est mon côté psycho rigide je pense :roll:
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphanteau du PHP | 25 Messages

08 mars 2006, 13:00

Merci cela marche....Mais il y a encore un pb :
Dans la table je n'arrive pas a afficher le type:
pourtant cela me semble bon :

Code : Tout sélectionner

print"<td>".$row["type"]."</td>";
en tout cas merci pour les explications

Eléphanteau du PHP | 25 Messages

08 mars 2006, 14:37

ca y est c'est resolu merci a tous ! :lol: