1 seule requête pour afficher le "count" de tous l

Invité
Invité n'ayant pas de compte PHPfrance

19 avr. 2006, 17:06

Bonjour !

J'ai cette requête :
$sql = 'SELECT count(id) FROM liens WHERE dpt=75';
Le souci auquel je me heurte c'est que j'ai tous les départements de France, donc X requêtes à faire pour afficher le nombre de membres (grâce aux id) par département.

Savez-vous s'il y a un moyen de faire avec des tableaux pour transformer ces X requêtes et ne plus faire qu'une requête ?

Ensuite comment puis-je afficher le nombre pour chaque département ?

Merci de votre aide ;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 avr. 2006, 17:11

Un regroupement par département avec le fonction "group by" devrait faire ton affaire :)

Code : Tout sélectionner

SELECT dpt, count(id) FROM liens WHERE dpt=75 GROUP BY dpt

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

19 avr. 2006, 17:13

À condition d'enlever le WHERE dpt=75 , non ? ;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 avr. 2006, 17:17

Argh ! bien vu :)

'fin ça marche aussi, mais c'est nettement moins interessant ;)

Bon faut pas m'en vouloir, y a une heure à partir de laquelle je ne réflechit plus et je ne dis que des bétises....

... et généralement c'est 8-9h du matin ;)

Invité
Invité n'ayant pas de compte PHPfrance

19 avr. 2006, 19:36

oki doki :) La requête devrait fonctionner. Maintenant comment puis-je afficher les différents résultats à partir de cette requête ?

merci ;)

Invité
Invité n'ayant pas de compte PHPfrance

19 avr. 2006, 20:05

Par exemple pour mettre
dpt 75 : X membres
dpt 77 : Y membres
etc...?

Invité
Invité n'ayant pas de compte PHPfrance

20 avr. 2006, 10:12

Quelqu'un peut-il m'aider...? :?

Je suis totalement bloqué pour l'affichage...

Code : Tout sélectionner

while ($row=mysql_fetch_row($req)) { echo $row1[1]; }
Cette requête me sort tous les résultats à la suite. Mais comme faire justement pour que je puisse les sortir un par un et les afficher où je veux ?

Je me ménage complètement dans les tableaux...

merci !

ViPHP
ViPHP | 2144 Messages

20 avr. 2006, 10:16

Montre nous un embryon de code php pour qu'on puisse t'aider.
Si tu ne sais pas comment réaliser l'affichage d'un select sur une base de donnée, tu trouveras un tutorial complêt sur le site.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 avr. 2006, 10:20

Déjà une petite modif dans la requête parce que j'aime bien donner des noms aux choses, vu que les numéros c'est traitre, suffit qu'on rajoute une colonne au début et hop, tout saute :)

Code : Tout sélectionner

SELECT dpt, count(id) AS nb FROM liens GROUP BY dpt
while ($row=mysql_fetch_assoc($req)) { // si tu stockes les lignes dans $row, faut pas utiliser $row1 ensuite ;)
  echo "Dépt. ".$row['dpt']." : ".$row['nb']." membre(s)<br>"; // affiche "Dépt xx : yy membre(s)<br>"
} 
A placer où tu veux, éventuellement agrémenter pour faire un tableau html ou autre... :)

Invité
Invité n'ayant pas de compte PHPfrance

20 avr. 2006, 10:24

Oki merci Ryle ;)

Je vois très bien ce que ça va donner avec ton code. Mais j'ai un souci et de taille. Je ne peux pas réellement l'appliquer, voici pourquoi :

En fait c'est sur une carte de France que je voudrais afficher le nombre de membre par département, donc à des endroits bien précis sur la carte.

Donc si je fais une boucle comme ça je n'aurais aucun moyen de récupérer le nombre d'enregistrements d'un département donné puis l'afficher où il faut...c'est là mon gros problème.

Je ne sais pas si j'ai été assez clair. J'espère que tu pourras m'aider ;)

Merci !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

20 avr. 2006, 10:30

Ben tout dépend comment tu gère l'affichage sur ta carte (php, javascripts, autre ?). Dans ce cas, l'idéal est de passer par un tableau associatif :
$departement = array();
while ($row=mysql_fetch_assoc($req)) { 
  $tabDdept[$row['dpt']] = $row['nb'];
}
Tu peux ainsi interoger $tabDdept en lui donnant le numéro du département, il te retournera le nombre de membres associés :
echo $tabDdept[75]; // affiche le nb associés à l'index 75 du tableau

// si l'index n'est pas défini c'est qu'il n'y a pas de valeur en base, pour ne pas avoir d'erreur et éventuellement afficher un 0, tu peux donc faire un truc du genre :
echo (isSet($tabDdept[75])) ? $tabDdept[75] : 0;
Pour l'affichage ensuite, tout dépend de comment tu le gère, donc à toi de voir comment l'utiliser au mieux :)

Invité
Invité n'ayant pas de compte PHPfrance

20 avr. 2006, 10:33

Merci beaucoup Ryle !

Je teste tout ça et je reviendrais pour te donner les résultats ;)

Invité
Invité n'ayant pas de compte PHPfrance

20 avr. 2006, 11:07

Je ne comprends pas...y a quelque chose qui cloche. ça avance mais ce n'est pas encore au point :p

J'ai mis par région et non plus par département mais la logique reste la même et pourtant...
<?php
$base = mysql_connect ('localhost', 'root', ''); 
mysql_select_db ('***', $base);
		
$sql = 'SELECT region, count(id_membre) as nb FROM membre_carte GROUP BY region';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);
		
$region = array(); 
while ($row=mysql_fetch_assoc($req))
{
	$tabReg[$row['region']] = $row['nb'];
}

echo "idf : ".$tabReg['ile+de+france'];
echo " - ";
echo "haut nor : ".$tabReg['haute+normandie'];
?>
J'ai bien dans ma base 2 enregistrements, un qui a "ile+de+france" et l'autre "haute+normandie". Quand je lance la requête dans phpMyAdmin, j'ai le bon résultat mais à l'affichage avec ce code j'ai idf : 1 - haut nor :. Donc pas de résultat pour haute+normandie.

J'ai essayé de mettre les 2 enregristrements à "ile+de+france". Et résultat : plus aucun enregistrement ni pour l'un ni pour l'autre alors que je devrais avoir idf : 2 :?

Une tite idée ?

Merci !

Invité
Invité n'ayant pas de compte PHPfrance

20 avr. 2006, 11:22

J'ai fait un autre test :
while ($row=mysql_fetch_assoc($req))
{
 $tabReg[$row['region']] = $row['nb'];
 echo $row['region'];
}
Et je n'ai que "ile+de+france" d'affiché alors que je devrais avoir "ile+de+francehaute+normandie". J'ai l'impression qu'il ne parcourt pas tous les enregistrements :?

Invité
Invité n'ayant pas de compte PHPfrance

20 avr. 2006, 11:31

J'ai trouvé... :oops:

Une ancienne ligne de code ($data = mysql_fetch_array($req); ) que j'ai oublié d'enlever.

Ca marche nickel chrome Ryle ;) Merci beaucoup !

[Résolu] !