Page 1 sur 1

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

Posté : 19 avr. 2006, 17:06
par Invité
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 ;)

Posté : 19 avr. 2006, 17:11
par Ryle
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

Posté : 19 avr. 2006, 17:13
par albat
À condition d'enlever le WHERE dpt=75 , non ? ;)

Posté : 19 avr. 2006, 17:17
par Ryle
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 ;)

Posté : 19 avr. 2006, 19:36
par Invité
oki doki :) La requête devrait fonctionner. Maintenant comment puis-je afficher les différents résultats à partir de cette requête ?

merci ;)

Posté : 19 avr. 2006, 20:05
par Invité
Par exemple pour mettre
dpt 75 : X membres
dpt 77 : Y membres
etc...?

Posté : 20 avr. 2006, 10:12
par Invité
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 !

Posté : 20 avr. 2006, 10:16
par iclo
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.

Posté : 20 avr. 2006, 10:20
par Ryle
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... :)

Posté : 20 avr. 2006, 10:24
par Invité
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 !

Posté : 20 avr. 2006, 10:30
par Ryle
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 :)

Posté : 20 avr. 2006, 10:33
par Invité
Merci beaucoup Ryle !

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

Posté : 20 avr. 2006, 11:07
par Invité
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 !

Posté : 20 avr. 2006, 11:22
par Invité
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 :?

Posté : 20 avr. 2006, 11:31
par Invité
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] !