Tableau PHP : trier en fonction des valeurs


Bahanix
WRInaute discret
WRInaute discret
 
Messages: 131
Inscription: 7 Juin 2005

Tableau PHP : trier en fonction des valeurs

Message le Dim Mar 05, 2006 21:28

Code: Tout sélectionner
$liste=array();
$sql="SELECT `postal` FROM `membres` WHERE `postal`!=''";
$res = queryDB($sql);
while($row = mysql_fetch_array($res)){
   $postal=$row['postal'];
   if(strlen($postal)==4)$postal='0'.$postal;
   $code=substr($postal,0,2);
   $liste[$code]++;
}


Alors j'ai un petit soucis pour faire ceci :
Je voudrais afficher les x départements qui possèdent le plus de membres.
Il faut donc trier le tableau $liste par ordre décroissant en fonction des valeurs et non des clés, puis afficher la clé associée pour chaque valeur.

Voici un exemple de ce que je voudrais obtenir :
Code: Tout sélectionner
75 : 25
92 : 18
34 : 3


(dans ce cas, x vaudrais 3).
Mais voila, je n'y arrive pas -_-#

Quelqu'un aurait il la solution ^^ ?

Takumi
WRInaute discret
WRInaute discret
 
Messages: 118
Inscription: 4 Jan 2006

Message le Dim Mar 05, 2006 22:08

Je pense qu'il est beaucoup plus simple et efficace de faire tout ce traitement dans la requête sql, sauf si tu as vraiment besoin dans cette page de la liste complète des codes postaux pour chaque membre.

Donc à ta place je commencerais par faire un script qui met au propre dans ta base sql tout les codes postaux sur 5 chiffres ^^

Et ensuite utiliser une requête avec un GROUP BY SUBSTR sur les 2 premiers caractères du code postal :
Code: Tout sélectionner
SELECT SUBSTR(postal,0,2) as departement,count(id) as total FROM membres WHERE postal!='' GROUP BY departement ORDER BY total DESC LIMIT 0,3


:)


Bahanix
WRInaute discret
WRInaute discret
 
Messages: 131
Inscription: 7 Juin 2005

Message le Dim Mar 05, 2006 22:31

La requete renvois une erreur, j'ai remplacé "substr" par "substring", pas d'erreur, mais ne renvois pas ce qu'il faut :/ (juste une ligne avec departement vide et total valant le nombre de membres où total!='')

On notera qu'en retirant le substr[ing], les résultats sont corrects, mais il présente les 5 chiffres code postal :/

Edit : Problème résolut, une étrangeté de la nature fait que le 1er caractère d'une chaine traitée par substring a pour index "1" et non "0".

Exemple : 75000

Pour extraire le 75, il faut
subtring(monchamps,1,2);

et non le "0" dont on est habitué pour le PHP.

Merci pour ton aide Takumi ;)

Takumi
WRInaute discret
WRInaute discret
 
Messages: 118
Inscription: 4 Jan 2006

Message le Lun Mar 06, 2006 0:57

Oups oui désolé c'est 1 et non pas 0 en effet ^^


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité