Barbarus Posté 28 Juin 2007 Posté 28 Juin 2007 Bonsoir à tous, Me revoici avec un nouveau problème, en fait j'arrive à ce que ça me compte le nombre total d'enregistrements mais je n'arrive pas à le faire séparément pour chaque espèce. Voici la page en question La première espèce devrait me donner le chiffre 1 car il n'y a qu'une seule commune où elle a été observée. J'ai essayé COUNT qui me renvoi le nombre total. J'ai mis un WHERE mais toujours ce même résultat. Voilà mon code d'origine: <?php//appel du haut de la page$titre = "Liste des commune par espèces";include 'haut.php';require ("connection.inc.php");// LISTE DES ESPECES$sql = 'SELECT DISTINCT communes.idcommune, communes.commune, especes.idespece, especes.nomespece, especes.idfiche, jonction.date, jonction.recolteur, jonction.identificateur FROM communes, especes, jonction WHERE jonction.idcommune = communes.idcommune AND especes.idespece = jonction.idespece ORDER BY especes.nomespece, 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)){ $commune = $row["nomespece"];if ($prec ==" "){/* premiere ligne */echo ' <br><br>';echo ' <center><img src="http://belgant.winetux.be/images/fourmi.jpg" width="304" height="186"></center>';echo ' <br><br>';echo '<h2><a href="http://belgant.winetux.be/forums/index.php?autocom=ibwiki&cmd=article&id='.$row['idfiche'].'" target="_blank">'.$row['nomespece'].'</a></h2>';echo '<table width="100%" border="0">';echo ' <tr>';echo ' <td width="25%"><u><strong>Commune</strong></u></td>';echo ' <td width="25%"><u><strong>Récolteur</strong></u></td>';echo ' <td width="25%"><u><strong>Identificateur</strong></u></td>';echo ' <td width="25%"><u><strong>Date de récolte</strong></u></td>';echo ' </tr>';echo ' <tr>';echo ' <td width="25%"><strong>'.$row['commune'].'</strong></td>';echo ' <td width="25%">'.$row['recolteur'].'</td>';echo ' <td width="25%">'.$row['identificateur'].'</td>';echo ' <td width="25%">'.$row['date'].'</td>';echo ' </tr>';}else{/* lignes suivantes */if($commune == $prec){/* commune egale a la precedente */echo ' <tr>';echo ' <td width="25%"><strong>'.$row['commune'].'</strong></td>';echo ' <td width="25%">'.$row['recolteur'].'</td>';echo ' <td width="25%">'.$row['identificateur'].'</td>';echo ' <td width="25%">'.$row['date'].'</td>';echo ' </tr>';}else{/* commune differente de la precedente */echo '</table>';echo '<br><hr><br>';echo '<h2><a href="http://belgant.winetux.be/forums/index.php?autocom=ibwiki&cmd=article&id='.$row['idfiche'].'" target="_blank">'.$row['nomespece'].'</a></h2>';echo '<table width="100%" border="0">';echo ' <tr>';echo ' <td width="25%"><u><strong>Commune</strong></u></td>';echo ' <td width="25%"><u><strong>Récolteur</strong></u></td>';echo ' <td width="25%"><u><strong>Identificateur</strong></u></td>';echo ' <td width="25%"><u><strong>Date de récolte</strong></u></td>';echo ' </tr>';echo ' <tr>';echo ' <td width="25%"><strong>'.$row['commune'].'</strong></td>';echo ' <td width="25%">'.$row['recolteur'].'</td>';echo ' <td width="25%">'.$row['identificateur'].'</td>';echo ' <td width="25%">'.$row['date'].'</td>';echo ' </tr>';}}$prec = $commune ;}//on ferme la connexion à la basemysql_close();echo '</table>';//appel du haut de la pageinclude 'bas.php';?> Voici la page une fois que je l'ai modifiée: <?php//appel du haut de la page$titre = "Liste des commune par espèces";include 'haut.php';require ("connection.inc.php");// LISTE DES ESPECES$sql = 'SELECT DISTINCT communes.idcommune, communes.commune, especes.idespece, especes.nomespece, especes.idfiche, jonction.date, jonction.recolteur, jonction.identificateur FROM communes, especes, jonction WHERE jonction.idcommune = communes.idcommune AND especes.idespece = jonction.idespece ORDER BY especes.nomespece, communes.commune ASC' ;$counter=mysql_query("SELECT COUNT(*) idcommune FROM jonction WHERE idespece = '$idespece'");// Récupère la seule ligne du jeu d'enregistrements$row=mysql_fetch_object($counter);// 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)){ $commune = $row["nomespece"];if ($prec ==" "){/* premiere ligne */ La fin est identique et ça donne ceci Ca indique "La table comporte 518 enregistrement(s)." Merci d'avance
Nanane Posté 29 Juin 2007 Posté 29 Juin 2007 Bonjour, $counter=mysql_query("SELECT COUNT(*) idcommune FROM jonction WHERE idespece = '$idespece'"); Je ne vois pas la variable $idespece dans ton code... Tout ce que je peux dire c'est que si tu voulais le nombre pour chaque espece, il faudrait deja effectuer cette requete dans une boucle. Avec a chaque itération une espece différente (il faut donc rappatrier toutes les especes (les idespece en fait) dans un tableau et effectuer un Foreach) : $tab_especes = mysql_query("SELECT DISTINCT especes.idespece FROM especes ORDER BY idespece ASC;");$i=0;foreach (mysql_fetch_row($tab_especes) as $espece){ $idespece = $espece[0]; $counts[$i]=mysql_query("SELECT COUNT(*) idcommune FROM jonction WHERE idespece = '$idespece'");} Tu te retrouves donc avec un tableau $counts, dont la valeur $count est le nombre d'enregistrements pour l'espece avec l'id $tab_especes.
Lanza Posté 29 Juin 2007 Posté 29 Juin 2007 $counts = "SELECT COUNT(DISTINCT(idcommune)) FROM jonction GROUP BY idespece" ?
Barbarus Posté 30 Juin 2007 Auteur Posté 30 Juin 2007 Bonjour, Je n'arrive toujours pas à réaliser ce count, qu'est ce que j'ai loupé encore? C'est la première fois que j'utilise Foreach, je suis un peu largué là. Merci d'avance
Nanane Posté 2 Juillet 2007 Posté 2 Juillet 2007 Foreach a une syntaxe tres simple, faite pour explorer facilement un tableau : Foreach ( XXX as YYY ){...} Foreach va s'occuper d'affecter chaque élément du tableau XXX (chaque XXX) a la variable YYY, avant d'effectuer les instructions entre les accolades. Et il s'arrete quand il est arrivé au dernier élément (sauf si on met return ou break dans la boucle). Ca revient a faire ceci : for($i=0;$i<sizeof(XXX);$i++){YYY = XXX[$i];...} Ce qui revient exactement a la meme chose, mais qui est beaucoup moins lisible.
petit-ourson Posté 2 Juillet 2007 Posté 2 Juillet 2007 Foreach ( XXX as YYY ){...} Ca revient a faire ceci : for($i=0;$i<sizeof(XXX);$i++){YYY = XXX[$i];...} Mais il faut noter toutefois que : Foreach ( XXX as YYY ){YYY = 'toto';} Ne revient pas à faire cela : for($i=0;$i<sizeof(XXX);$i++){XXX[$i] = 'toto';...}
Nanane Posté 2 Juillet 2007 Posté 2 Juillet 2007 Héhé ca me parait normal Faire Foreach ( XXX as YYY ){YYY = 'toto';} ca revient a faire for($i=0;$i<sizeof(XXX);$i++){YYY = XXX[$i];YYY = 'toto';...}
captain_torche Posté 2 Juillet 2007 Posté 2 Juillet 2007 Dans ces cas-là, on peut aussi utiliser une boucle foreach <?phpforeach($XXX as $data) {$YYY = $data;}?>
Barbarus Posté 12 Juillet 2007 Auteur Posté 12 Juillet 2007 Bonjour à tous, Bon j'ai passé des heures à trifouiller tout ça, à essayer une multitude de combinaisons mais sans succés, je commence à désespérer. Voici le code de ma page d'origine: <?php//appel du haut de la page$titre = "Liste des commune par espèces";include 'haut.php';require ("connection.inc.php");// LISTE DES ESPECES$sql = 'SELECT DISTINCT communes.idcommune, communes.commune, especes.idespece, especes.nomespece, especes.idfiche, jonction.date, jonction.recolteur, jonction.identificateur FROM communes, especes, jonction WHERE jonction.idcommune = communes.idcommune AND especes.idespece = jonction.idespece ORDER BY especes.nomespece, 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)){ $commune = $row["nomespece"];if ($prec ==" "){/* premiere ligne */echo ' <br><br>';echo ' <center><img src="http://www.belgant.be/images/fourmi.jpg" width="304" height="186"></center>';echo ' <br><br>';echo '<h2><a href="http://www.belgant.be/forums/index.php?autocom=ibwiki&cmd=article&id='.$row['idfiche'].'" target="_blank">'.$row['nomespece'].'</a></h2>';echo '<table width="100%" border="0">';echo ' <tr>';echo ' <td width="25%"><u><strong>Commune</strong></u></td>';echo ' <td width="25%"><u><strong>Récolteur</strong></u></td>';echo ' <td width="25%"><u><strong>Identificateur</strong></u></td>';echo ' <td width="25%"><u><strong>Date de récolte</strong></u></td>';echo ' </tr>';echo ' <tr>';echo ' <td width="25%"><strong>'.$row['commune'].'</strong></td>';echo ' <td width="25%">'.$row['recolteur'].'</td>';echo ' <td width="25%">'.$row['identificateur'].'</td>';echo ' <td width="25%">'.$row['date'].'</td>';echo ' </tr>';}else{/* lignes suivantes */if($commune == $prec){/* commune egale a la precedente */echo ' <tr>';echo ' <td width="25%"><strong>'.$row['commune'].'</strong></td>';echo ' <td width="25%">'.$row['recolteur'].'</td>';echo ' <td width="25%">'.$row['identificateur'].'</td>';echo ' <td width="25%">'.$row['date'].'</td>';echo ' </tr>';}else{/* commune differente de la precedente */echo '</table>';echo '<br><hr><br>';echo '<h2><a href="http://www.belgant.be/forums/index.php?autocom=ibwiki&cmd=article&id='.$row['idfiche'].'" target="_blank">'.$row['nomespece'].'</a></h2>';echo '<table width="100%" border="0">';echo ' <tr>';echo ' <td width="25%"><u><strong>Commune</strong></u></td>';echo ' <td width="25%"><u><strong>Récolteur</strong></u></td>';echo ' <td width="25%"><u><strong>Identificateur</strong></u></td>';echo ' <td width="25%"><u><strong>Date de récolte</strong></u></td>';echo ' </tr>';echo ' <tr>';echo ' <td width="25%"><strong>'.$row['commune'].'</strong></td>';echo ' <td width="25%">'.$row['recolteur'].'</td>';echo ' <td width="25%">'.$row['identificateur'].'</td>';echo ' <td width="25%">'.$row['date'].'</td>';echo ' </tr>';}}$prec = $commune ;}//on ferme la connexion à la basemysql_close();echo '</table>';//appel du haut de la pageinclude 'bas.php';?> Alors où dois-je mettre ceci: $tab_especes = mysql_query("SELECT DISTINCT especes.idespece FROM especes ORDER BY idespece ASC;");$i=0;foreach (mysql_fetch_row($tab_especes) as $espece){$idespece = $espece[0];$counts[$i]=mysql_query("SELECT COUNT(*) idcommune FROM jonction WHERE idespece = '$idespece'");} Et comment puis-je appeler ce chiffre (compte des espèces) dans un echo? Désolé de revenir là dessus, mais là je suis perdu totalement, je n'arrive pas à faire quelque chose de tout ça. Merci d'avance.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant