Problème avec une requête contenant LEFT JOIN.

cs_MonPied Messages postés 1 Date d'inscription mardi 2 décembre 2008 Statut Membre Dernière intervention 19 mars 2009 - 19 mars 2009 à 16:55
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 19 mars 2009 à 19:19
Bonjour,


j'explique mon problème, après un sujet ou je demandais de l'aide pour éviter de faire plein de fois une requête un Zéro me proposa d'utiliser un LEFT JOIN à l'intérieur de SELECT. Après avoir lue un tutoriel je le créa rapidement, mais j'ai beaucoup, pour pas dire énormément de problème. Voici la source et si dessous les problèmes :


Code : PHP


<?php $titre="Forum";


include("includes/haut.php"); ?>




<?php if(isset($_GET['rubrique']))


{


}


elseif(isset($_GET['rubrique']) AND isset($_GET['tropic']))


{


}


else


{


$forum = mysql_query("SELECT forum_titre.id AS id_titre,


forum_titre.titre AS titre_titre,


forum_rubrique.id AS forum_id,


forum_rubrique.id_titre,


forum_rubrique.titre AS forum_titre,


forum_rubrique.commentaire AS forum_commentaire


FROM forum_titre


LEFT JOIN forum_rubrique


ON forum_titre.titre = forum_rubrique.id_titre ") or die(mysql_error());


while($titre = mysql_fetch_array($forum))


{


echo $titre['id_titre'];


echo $titre['titre_titre'];


echo " ".$titre['titre_titre']."

";


if($titre['titre_titre'] == NULL)


{


echo '1';


}


while($rubrique = mysql_fetch_array($forum))


{


if($rubrique['id_titre'] == $titre['id_titre'])


{


echo " [forum- ]

[forum- ]

[forum- ]

[forum- ]




 


 


Voilà je pense avoir bien explique le problème (Ps : J'ai déjà fais diverse recherche mais j'ai rien trouver... soit je suis nul, soit je suis l'un des rares idiots à ne pas réussir ceci, soit personne n'a traiter de ça ici.)


(ps2 : Si voulue je fais des photos de la tables mysql)

1 réponse

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
19 mars 2009 à 19:19
Hello,

t'as peut-être bien expliqué...mais moi je n'ai rien compris!
En tous cas, ton code est très, très bizarre...pourquoi tu fais 2 boucles while() imbriquées?? Ca ne peut pas marcher. (je demande pourquoi, mais en fait, je sais pourquoi...)

Bon...
Que fait un LEFT JOIN ?
Imaginons ces 2 tables :
table noms
nom_id = 1
nom_libelle = DUPOND

nom_id = 2

nom_libelle = DUPONT

table prenoms
prenom_id = 1
prenom_libelle = toto
nom_id = 1

prenom_id = 2
prenom_libelle = titi
nom_id = 1

Et cette requête:
SELECT nom.nom_libelle, prenom.prenom_libelle
FROM noms nom
LEFT JOIN prenoms prenom ON prenom.nom_id = nom.nom_id

Elle va me ressortir 3 lignes contenant :
1 : DUPOND, toto
2 : DUPOND, titi
3 : DUPONT, null

Un INNER JOIN à la place du LEFT JOIN va me sortir 2 lignes :
1 : DUPOND, toto

2 : DUPOND, titi

Si tu fais 2 boucles imbriquées, je suppose que c'est pour éviter la répétition de ton titre...je me trompe?
Mais ça ne marche pas comme ça!
Tu dois ne faire qu'une boucle, et pour ton affichage, tester où tu en es en déclarant une variable temporaire, pour faire simple.
Avec ma requête (après le mysql_query()):

<?php
$sTempNomSave = null;
while($aData = mysql_fetch_assoc($ressourceDeMonMysqlQuery)) {
    if($aData['nom_libelle'] !== $sTempNomSave) {
        $sTempNomSave = $aData['nom_libelle'];
        echo 'NOM : ', $aData['nom_libelle'], '
';
    }
    echo 'PRENOM : ', $aData['prenom_libelle'], '
';
}
?>
0
Rejoignez-nous