Tableau PHP : trier en fonction des valeurs

WRInaute discret
Code:
$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:
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 ^^ ?
 
WRInaute discret
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:
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

:)
 
WRInaute discret
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 ;)
 
Discussions similaires
Haut