Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/09/2007, 10h52   #1
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
Par défaut [SQL] tri d'un resultat avec boucle for

Bonjour le forum,

j'ai une BDD qui contient parmis les champs un nommé "cp" (Code postal)

Je souhaiterai affiché la somme des lignes dans ma bdd par Code postal et ordonner les résultat en fonction du resultat de la somme.

Mon début de code est :

Code :
1
2
3
4
5
6
7
for ($i=1; $i<=96; $i++)
{
$dept =  mysql_query("SELECT COUNT(*) FROM demandes where cp ='$i'");
$rdept = mysql_fetch_row($dept);
$tdept = $rdept[0] + 0;
echo "$i ($tdept)<br>";
}
et paradoxalement c'est le tri qui devrait etre le plus facile a coder et pourtant ca ne fonctionne pas avec un order car un order ne me trirait pas en fonction du resultat COUNT mais en fonction de la variable champ.

Enfin pareil avec la limit d'affichage que je souhaiterai a 50 puis le second tableau a 50, 50, mais comment faire puisque le tri doit se faire en fonction du resultat...

Merci a tous pour votre patience.
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2007, 11h02   #2
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
tu peux faire ce tri en SQL directement en une seule requete:
Code :
$dept =  mysql_query("SELECT cp, COUNT(*) as NbParCp FROM demandes GROUP BY cp ORDER BY cp ASC");
ensuite tu fais une boucle while pour parcourir la liste des résultats
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2007, 11h21   #3
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
je vais essayer
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2007, 12h09   #4
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
(Je ne comprends pas, ce qu eje cherche c'est ordonner les codes postaux en fonction des sommes des lignes présentant chaque code postal.

Avec ton select, je n'obtiens pas ce resultat.

Je recherche a obtenir qq choses comme ça :
69 (114)
75 (95)
13 (94)
59 (88)
etc...

Les resultats entre parentheses sont les COUNT
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2007, 12h16   #5
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Pardonc j'avais mal compris, si tu veux trier en fonction des count essaies ca alors:
Code :
$dept =  mysql_query("SELECT cp, COUNT(*) as NbParCp FROM demandes GROUP BY cp ORDER BY NbParCp ASC");
Si jamais ca ne marche pas, essaies ca
Code :
$dept =  mysql_query("SELECT cp, COUNT(*) as NbParCp FROM demandes GROUP BY cp ORDER BY 2 ASC");
2 correspond au numéro de la colonne dans le SELECT, parfois ca fait des erreurs si tu utilises le nom d'une colonne nommée par AS ...

(autre chose, penses a vérifier ce que te retourne mysql_query() en cas d'erreur:
Code :
$dept = mysql_query() or die("Erreur SQL : " . mysql_error());
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2007, 12h30   #6
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
Ne t'excuses pas c'est déja vachement bioen que tu m'aides, merci.

Bon apparemment cela ne tri pas correctement, peut etre que cel vient de mon while:

voici le fichier :
www.test-internet.com/dept.php

et le code

Code :
1
2
3
4
5
6
7
8
9
$dept =  mysql_query("SELECT cp, COUNT(*) as NbParCp FROM demandes GROUP BY cp ORDER BY NbParCp ASC");
 
while($ligne = mysql_fetch_array($dept))
{
$rdept = mysql_fetch_row($dept);
$tdept = $rdept[0] + 0;
$cp = $ligne["cp"];
echo "$cp ($tdept)<br>";
}
il faudrait que j'arrive a écrire plutot quelques choses comme ceci :
echo "$cp (NbParCp)<br>";
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2007, 13h06   #7
Membre actif
 
Inscription : juillet 2007
Messages : 179
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : juillet 2007
Messages : 179
Points : 159
Points : 159
bonjour,
je crois que ce code marche,
Code :
1
2
3
4
5
6
7
8
9
$dept =  mysql_query("SELECT cp, COUNT(*) as NbParCp FROM demandes GROUP BY cp ORDER BY NbParCp ASC");
 
 
while($ligne = mysql_fetch_array($dept))
{
$cp = $ligne["cp"];
$nb = $ligne["NbParCp"];
echo $cp."(".$nb.")<br>";
}
teste est dis si c'est bon
sebdu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2007, 14h28   #8
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
Je vous remercie tous les deux, cela fonctionne trés bien.

J'ai juste quelques adaptations a faire.

Trés bonne journée
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2007, 14h30   #9
Membre actif
 
Inscription : juillet 2007
Messages : 179
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : juillet 2007
Messages : 179
Points : 159
Points : 159
je dirais que c'est koopajah qui a tout fait


n'oublie pas
sebdu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h16.


 
 
 
 
Partenaires

Hébergement Web