Un résultat en trop dans ma requête

Un résultat en trop dans ma requête - SQL/NoSQL - Programmation

Marsh Posté le 24-08-2010 à 09:40:27    

Bonjour,
 
J'ai une table sur la population de chaque pays du monde avec un champs continent. Je souhaiterais faire des calculs (somme, moyenne...) sur les populations par continents et pour cela voici un exemple de requête :
 

Code :
  1. <?php
  2. $select = 'SELECT SUM(population),continent FROM base GROUP BY continent';
  3. $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
  4. $total = mysql_num_rows($result);
  5. if($total) {
  6. echo '<table>'."\n";
  7.         echo '<tr>';
  8. echo '<td><b>Population</b></td>';
  9. echo '<td><b>Continent</b></td>';
  10. echo '</tr>'."\n";
  11. while($row = mysql_fetch_array($result)) {
  12. echo '<tr>';
  13. echo '<td>'.$row["population"].'</td>';
  14. echo '<td>'.$row["continent"].'</td>';
  15. echo '</tr>'."\n";
  16.     }
  17. echo '</table>'."\n";
  18. }
  19. else echo 'Pas d\'enregistrements dans cette table...';
  20. mysql_free_result($result);
  21. ?>


 
 
Ceci me permet bien de renvoyer la somme de la population de chaque continent sous forme de tableau. Mais le problème est qu'une ligne s'insère avec pour population 0 et rien en continent...
 
Population      Continent
0                    
952025364     afrique  
977498520     ameriques  
1500             antarctique  
3920751407   asie  
709565899    europe  
36832649      oceanie  
 
 
Ma question : auriez vous une idée de ce qui produit cette première ligne ? Une erreur dans ma requête ne serait pas étonnante... Un problème dans ma table ?
 
Merci par avance,

Reply

Marsh Posté le 24-08-2010 à 09:40:27   

Reply

Marsh Posté le 24-08-2010 à 10:39:03    

99,99% de chances que tu aies tout simplement au moins une ligne "vide" dans ta table, où "continent" n'a pas de valeur (et probablement population aussi vu que la somme te retourne 0).

 

Essaies un SELECT COUNT(*) FROM base WHERE continent IS NULL

 

Edit: sinon tu peux modifier ta requete pour ignorer la ligne en trop:
SELECT SUM(population),continent FROM base GROUP BY continent HAVING SUM(population)>0
ou bien
SELECT SUM(population),continent FROM base WHERE continent IS NOT NULL GROUP BY continent

 

Mais en théorie c'est mieux si tu "corriges" tes données en base.


Message édité par lasnoufle le 24-08-2010 à 10:42:49

---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 24-08-2010 à 16:54:01    

Merci ! Heureuse de voir que mon code fonctionne, en fait une ligne vide s'était glissée toute à la fin de ma base, je ne l'avais pas vu celle là...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed