Jump to content

Nombre d'enregistrements


Recommended Posts

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 base
mysql_close();
echo '</table>';

//appel du haut de la page
include '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

Link to post
Share on other sites

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.

Link to post
Share on other sites

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.

Link to post
Share on other sites

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';
...
}

Link to post
Share on other sites

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';
...
}

Link to post
Share on other sites
  • 2 weeks later...

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 base
mysql_close();
echo '</table>';

//appel du haut de la page
include '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.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...