Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1062 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  MAX, MIN retourne un tableau

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

MAX, MIN retourne un tableau

n°2043020
juanita88
Posté le 18-12-2010 à 16:22:22  profilanswer
 

Bonjour,
 
J'ai une base avec par exemple 3 colonnes : pays, continent, population. Je cherche à retourner sous la forme d'un tableau avec ces 3 colonnes la population maximale du pays en fonction du continent
 
Si je tape cette requête :

Code :
  1. <?php
  2. $select = 'SELECT pop,cont,pays FROM bddpays WHERE pop=(SELECT MAX(pop) FROM bddpays) order by cont';
  3. $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
  4. $total = mysql_num_rows($result);
  5. if($total) {
  6. echo '<table bgcolor="#FFFFFF">'."\n";echo '<tr>';
  7. echo '<td bgcolor="#669999"><b>Population</b></td>';
  8. echo '<td bgcolor="#669999"><b>Continent</b></td>';
  9. echo '<td bgcolor="#669999"><b>Pays</b></td>';
  10. echo '</tr>'."\n";
  11. while($row = mysql_fetch_array($result)) {
  12. echo '<tr>';
  13. echo '<td bgcolor="#CCCCCC">'; if (empty($row['pop'])) echo 'Non Disponible'; else echo number_format($row['pop'], 0, ',', '.') ; echo '    </td>';
  14. echo '<td bgcolor="#CCCCCC">'.$row["cont"].'</td>';
  15. echo '<td bgcolor="#CCCCCC">'.$row["pays"].'</td>';
  16. echo '</tr>'."\n";
  17.     }
  18. echo '</table>'."\n";
  19. }
  20. else echo 'Pas d\'enregistrements dans cette table...';
  21. mysql_free_result($result);
  22. ?>


 
Voici le résultat (une seule ligne correspondant au pays le plus peuplé de la base)
Population; Continent; Pays  
1.330.044.605;  asie; chine  
 
 
 
 
Mais si je fais ceci :

Code :
  1. <?php
  2. $select = 'SELECT MAX(pop),cont,pays FROM bddpays GROUP BY cont';
  3. $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
  4. $total = mysql_num_rows($result);
  5. if($total) {
  6. echo '<table bgcolor="#FFFFFF">'."\n";echo '<tr>';
  7. echo '<td bgcolor="#669999"><b>Population</b></td>';
  8. echo '<td bgcolor="#669999"><b>Continent</b></td>';
  9. echo '<td bgcolor="#669999"><b>Pays</b></td>';
  10. echo '</tr>'."\n";
  11. while($row = mysql_fetch_array($result)) {
  12. echo '<tr>';
  13. echo '<td bgcolor="#CCCCCC">'; if (empty($row['MAX(pop)'])) echo 'Non Disponible'; else echo number_format($row['MAX(pop)'], 0, ',', '.') ; echo '    </td>';
  14. echo '<td bgcolor="#CCCCCC">'.$row["cont"].'</td>';
  15. echo '<td bgcolor="#CCCCCC">'.$row["pays"].'</td>';
  16. echo '</tr>'."\n";
  17.     }
  18. echo '</table>'."\n";
  19. }
  20. else echo 'Pas d\'enregistrements dans cette table...';
  21. mysql_free_result($result);
  22. ?>


 
le résultat me retourne bien la population maximale par continent mais il y a une erreur pour le pays. Le pays affiché est en en fait le premier dans l'ordre alphabétique et non celui qui a la plus grande population...
Population; Continent; Pays  
138.283.240;  afrique; afrique-du-sud   -> le résultat devrait être nigeria
303.824.646;  ameriques; anguilla         -> ici USA
1.500;  antarctique; antarctique  
1.330.044.605;  asie; afghanistan         -> chine
140.702.094;  europe; albanie  
20.600.856;  oceanie; australie  
 
 
Auriez-vous une solution pour afficher le nom du pays relatif à la population maximale et à son continent ?
 
Merci par avance,

mood
Publicité
Posté le 18-12-2010 à 16:22:22  profilanswer
 

n°2043047
flo850
moi je
Posté le 18-12-2010 à 20:03:01  profilanswer
 

SELECT  
cont,pays,population  
FROM bddpays bp
WHERE population = ( SELECT max(b2.population) FROM bddpays bp2 where bp2.cont = bp.cont)

n°2043103
smaragdus
whores, drugs & J.S. Bach
Posté le 19-12-2010 à 12:27:39  profilanswer
 

A chaque fois que vous faites une sous-requête corrélée, Dieu tue un chaton.  
 
Depuis le temps qu'on le répète que les sous-requetes c'est LE MAL  :fou:  :fou:  :fou:  
 
C'est l'Instrument des Légions de Satan destiné à tourmenter les DBA dans le "7ième Enfer des Requetes Lentes"
 
La méthode correcte est de faire un "left join ... where is null"
 

SELECT bp.cont, bp.pays, bp.population  
FROM bddpays bp  
LEFT JOIN bddpays bp2 ON bp2.cont = bp.cont AND bp.population < bp2.population
WHERE bp2.cont IS NULL

Message cité 1 fois
Message édité par smaragdus le 19-12-2010 à 12:29:40
n°2043107
juanita88
Posté le 19-12-2010 à 12:42:16  profilanswer
 

Ok pas de sous-requête corrélée..
 
Par contre, je ne suis pas assez calée en SQL pour comprendre cette nouvelle requête.  
 
Actuellement, tout est dans une même base. A quoi correspond bp ? Faut-il que je crée cette base, mais avec quoi dedans ?

n°2043369
juanita88
Posté le 20-12-2010 à 21:21:45  profilanswer
 

Personne pour m'expliquer en quelques mots ou même un lien ?

n°2043375
flo850
moi je
Posté le 20-12-2010 à 21:28:40  profilanswer
 

bd est un alias pour la table bddpays  
la requete de smaragdus est en fait construite en se disant qu'il cherche un element de bdd pays qui n'en a aucun de plus grand

n°2043407
Antac
..
Posté le 20-12-2010 à 23:13:51  profilanswer
 

smaragdus a écrit :

A chaque fois que vous faites une sous-requête corrélée, Dieu tue un chaton.  
 
Depuis le temps qu'on le répète que les sous-requetes c'est LE MAL  :fou:  :fou:  :fou:  
 
C'est l'Instrument des Légions de Satan destiné à tourmenter les DBA dans le "7ième Enfer des Requetes Lentes"
 
La méthode correcte est de faire un "left join ... where is null"
 

SELECT bp.cont, bp.pays, bp.population  
FROM bddpays bp  
LEFT JOIN bddpays bp2 ON bp2.cont = bp.cont AND bp.population < bp2.population
WHERE bp2.cont IS NULL



 
Merci pour le fou rire !!!  :love:   :lol:  :lol:  :lol:  :lol:  :lol:  :sol:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  MAX, MIN retourne un tableau

 

Sujets relatifs
problème avec un tableau de structure !!!Besoin d'aide - Tableau HTML CSS
[PHP]Tableau dans les fonctions[PERL] Probleme de splice avec un tableau a 2 dimensions
Structure + Tableau dynamique en langage CPassage de tableau lors d'un changement de page.
Coloration des bords d'une case d'un tableau avec plusieurs couleurs.Taille max de tableau en VBA
Regex tableau et arrayTableau de caractère et $...
Plus de sujets relatifs à : MAX, MIN retourne un tableau


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR