Barbarus Posté 6 Juin 2007 Posté 6 Juin 2007 Bonjour à tous, J'essaie de grouper des enregistrements sur une carte. Bon pour commencer voici le code de cette page <?php//appel du haut de la page$titre = "Liste des espèces par commune";include 'haut.php';require ("connection.inc.php");// LISTE DES ESPECES$sql = 'SELECT DISTINCT communes.idcommune, communes.commune, especes.idespece, especes.nomespece, jonction.date, jonction.recolteur, jonction.identificateur FROM communes, especes, jonction WHERE jonction.idcommune = communes.idcommune AND especes.idespece = jonction.idespece ORDER BY communes.commune ASC';// on envoie la requete$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());echo '<h3>'.$data['commune'].'</h3> ';// on fait une boucle qui va faire un tour pour chaque enregistrementwhile($data = mysql_fetch_assoc($req)) {echo '<h3>'.$data['commune'].'</h3> <strong>'.$data['nomespece'].'</strong> <i>Récolteur:</i> '.$data['recolteur'].' <i>Identificateur:</i> '.$data['identificateur'].' <i>Date:</i> '.$data['date'].'<br/ >';}//fin de la boucle//on ferme la connexion à la basemysql_close();//appel du haut de la pageinclude 'bas.php';?> Comme vous pouvez le remarquer les communes se répétent autant de fois qu'il y a d'espèce enregistrée dedans. J'aimerai que ces espèces soient réunies pour donner quelque chose du genre: Commune 1 espèce1 espèce2 espèce3 Commune2 espèce1 espèce2 espèce3 J'ai vu le "group by" mais il faut un calcul apparemment et je n'ai pas de nombre pour effectuer un quelconque calcul dans ma base. Comment puis-je procéder? Merci d'avance
Nanane Posté 6 Juin 2007 Posté 6 Juin 2007 (modifié) Bonjour, Si j'ai bien compris, tu souhaiterais eviter d'avoir quelquechose comme : Commune 1 espèce1 Commune 1 espèce2 Commune 1 espèce3 Commune 2 espèce1 Commune 2 espèce2 Commune 2 espèce3 Pour ca j'ai ma propre technique j'utilise une variable $prec dans la boucle, dont la valeur serait ici le nom de la commune de la ligne précédente. Si c'est le meme que la ligne courante, alors je ne reecris pas le nom de la commune. Si c'en est un différent, je l'écris. Il faut aussi penser a bien initialiser la variable avant la boucle. Et le tour est joué. regarde ce topic ou j'ai deja repondu la meme chose Le cas est tres similaire il me semble. Ou alors n'aurai je rien compris? et mon post ne servirait donc a rien.... PS: pour les grosses parties de code, utilise plutot la codebox. ca marche mieux Modifié 6 Juin 2007 par Nanane
Barbarus Posté 6 Juin 2007 Auteur Posté 6 Juin 2007 (modifié) Merci pour la réponse J'ai essayé, ça me donne une erreur: http://belgant.winetux.be/carte/espcommunecomplet2.php le code: <?php//appel du haut de la page$titre = "Liste des espèces par commune";include 'haut.php';require ("connection.inc.php");// LISTE DES ESPECES$sql = 'SELECT DISTINCT communes.idcommune, communes.commune, especes.idespece, especes.nomespece, jonction.date, jonction.recolteur, jonction.identificateur FROM communes, especes, jonction WHERE jonction.idcommune = communes.idcommune AND especes.idespece = jonction.idespece ORDER BY communes.commune ASC' ;// on envoie la requete$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());// on fait une boucle qui va faire un tour pour chaque enregistrement$prec = " ";while ($row = mysql_fetch_assoc($req)){ if( $row["commune"] = $prec ){if (prec==" "){$tab.= "<tr>";}else{$tab.="</td></tr><tr>";}$tab .= "<td>".$row["commune"]."</td><td>".$row["nomespece"];}else{$tab .= $row["nomespece"];}$prec=$commune;}//on ferme la connexion à la basemysql_close();//appel du haut de la pageinclude 'bas.php';?> Là je suis totalement perdu, tu ne saurais pas me refaire un exemple mais sans les td et autre joyeusetés du genre? Merci d'avance Modifié 6 Juin 2007 par Barbarus
NorSeb Posté 7 Juin 2007 Posté 7 Juin 2007 Bonjour, Attention sur cette ligne : if( $row["commune"] = $prec ) Il manque un '=' if( $row["commune"] == $prec )
Nanane Posté 7 Juin 2007 Posté 7 Juin 2007 J'ai remarqué 2-3 erreurs dans ton code, notamment : = au lieu de == dans le test if($row["commune"] = $prec) faire if($prec == "") apres if($row["commune"] == $prec) implique que $row["commune"] = "" et n'a aucun sens Comme toujours dans les boucles et les if, je trouve qu'il faut d'abord commencer par decomposer les différents cas et situations qui peuvent se présenter et comment y réagir. 1- premiere ligne = "<h3>nom de commune</h3>" 2- lignes suivantes : cas 1 : nom de commune egal au precedent => ligne = "nom d'espece<br/>" cas 2 : nom de commune différent => ligne = "<br/><h3>nouvelle commune</h3>" Il te suffit de traduire ce cours paragraphe en "if" et le tour est joué. ca doit te donner une imbrication comme celle ci : if ($prec ==""){/* premiere ligne */}else{/* lignes suivantes */if($commune == $prec){/* commune egale a la precedente */}else{/* commune differente de la precedente */}} Et normalement ca fonctionne
Barbarus Posté 7 Juin 2007 Auteur Posté 7 Juin 2007 Salut, J'ai modifié le code: $sql = 'SELECT DISTINCT communes.idcommune, communes.commune, especes.idespece, especes.nomespece, jonction.date, jonction.recolteur, jonction.identificateur FROM communes, especes, jonction WHERE jonction.idcommune = communes.idcommune AND especes.idespece = jonction.idespece ORDER BY communes.commune ASC' ;// on envoie la requete$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());// on fait une boucle qui va faire un tour pour chaque enregistrement$prec = " ";while ($row = mysql_fetch_assoc($req)){ if ($prec ==" "){/* premiere ligne */echo '<h3>1'.$row['commune'].'</h3> <strong>'.$row['nomespece'].'</strong> <i>Récolteur:</i> '.$row['recolteur'].' <i>Identificateur:</i> '.$row['identificateur'].' <i>Date:</i> '.$row['date'].'<br/ >';}else{/* lignes suivantes */if($commune == $prec){/* commune egale a la precedente */echo '<strong>'.$row['nomespece'].'</strong> <i>Récolteur:</i> '.$row['recolteur'].' <i>Identificateur:</i> '.$row['identificateur'].' <i>Date:</i> '.$row['date'].'<br/ >';}else{/* commune differente de la precedente */echo '<h3>3'.$row['commune'].'</h3> <strong>'.$row['nomespece'].'</strong> <i>Récolteur:</i> '.$row['recolteur'].' <i>Identificateur:</i> '.$row['identificateur'].' <i>Date:</i> '.$row['date'].'<br/ >';}}$prec = $commune ;}//fin de la boucle//on ferme la connexion à la basemysql_close(); J'ai mis un 1 et un 3 pour pouvoir me repérer à l'affichage (ben ouais faut bien trouver des magouilles pour les essais) Bon voilà ce que ça donne: http://belgant.winetux.be/carte/espcommunecomplet2.php On peut voir qu'en fait il fait la première ligne et après il considére tout le temps qu'aucune commune n'est nouvelle et il indique uniquement l'espèce. J'ai sûrement dû loupé quelque chose mais quoi? Ca fait une heure que je retourne ça dans tous les sens et je n'arrive pas à mettre le doigt sur ce qui cloche (fin là suis déjà content que tous les enregistrements s'affichent ) Désolé mais c'est la première fois que j'utilise des if et else et j'ai un peu de mal.
Nanane Posté 7 Juin 2007 Posté 7 Juin 2007 (modifié) il te manque juste une ligne en début de boucle, je crois... $commune = $row["commune"]; dans ton code, lorsque tu fais $prec = $commune la premiere fois, $commune n'est pas defini... et le tour suivant tu test $commune == $prec... donc c'est forcement vrai... et ainsi de suite... Modifié 7 Juin 2007 par Nanane
Barbarus Posté 7 Juin 2007 Auteur Posté 7 Juin 2007 Je le savais c'était une connerie (pour ne pas changer ) Niquel ça fonctionne désormais, un peu de mise en page et c'est bon. En tout cas un grand merci pour ton aide et ta patience
Nanane Posté 7 Juin 2007 Posté 7 Juin 2007 Pas de soucis Si tu as des questions sur quoi que ce soit en php, n'hesite pas a m'envoyer un MP. Si c'est a la portée de mes compétences je te repondrai
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant