all HTML

Accèdez à votre compte : 

Créer un compte …

Perte de mot de passe …

  • Accueil
  • Forum de discussions
  • Publications
  • Communauté

Poser une question

Sélection des sujets

  • Toutes les discussions
  • Questions sans réponse
  • par langage de programmation :
    html css javascript php sql asp xml java C# action script
  • par thématique :
    animation - motion design graphisme - webdesign audio - vidéo accessibilité droit - législation web apps - logiciels référencement - seo hébergement administration serveur site web e-commerce

Faire un group by sur le résultat d'un count() dans une requête SQL

Sujet publié le 03/03/2012 par Styleman et classé dans résolu ! php sql

Bonjour,

Désolé pour le titre qui ne veut peut-être pas dire grand chose, mais je ne savais pas trop comment m'exprimer.

Voici mon problème, je voudrais faire un requête SQL et trier les résultats selon le nombre de "nom" différents (distinct).

Ma table est une table de réservation dans laquelle je stocke le nom de la personne qui réserve et le sport pour lequel elle a réserver.

Et je voudrais pouvoir afficher combien de personne on réservé 1x, 2x, 3x...- de 3x, + de 3x etc...

Ce que je suis parvenu à faire pour le moment, c'est afficher toute les personnes qui on réservé 1 fois, 2 fois etc...mais elle s'affiche toutes, par exemple, pour une table comme ceci:

id	sport	nom
4	Spinning	Julie
14	Spinning	Julie
24	Spinning	Mile
34	Spinning	JF
44	Escalade	JF
54	Escalade	JF
64	Tennis	Steph
J'arrive à obtenir ce résultat:

3 JF 
2 Julie 
1 Mile 
1 Steph
grâce à cette requête: $sql = "SELECT nom, count(nom) as nb_test FROM test GROUP BY nom";

Mais moi, ce que j'aimerais comme résultat, c'est:

3  1  (Car il n'y a que JF qui a réservé 3x)
2  1  (Car il n'y a que Julie qui a réservé 2x)
1  2 (Car il y a Steph et Mile qui ont réservé 1x)
Mon code actuel pour avoir mon résultat actuel:

<?php
     include("config.php");
	 
	 $sql = "SELECT nom, count(nom) as nb_test FROM test GROUP BY nom";
	 $req = mysql_query($sql) or die(mysql_error());
	 while($data = mysql_fetch_array($req)) {
	
	  $nb_test = $data[nb_test];
	  $test = $data[nom];
	  echo $nb_test.' '.$test.' '.$nb_total.'<br>';

	 }
?>

J'ai essayé avec GROUP BY nb_test mais apparemment on ne peut pas :(

Merci d'avance pour votre aide!
par Styleman, 03/03/2012 à 00h44
++ Styleman

répondre

Salut,

J'ai modifié le titre de la discussion pour le rendre un peu plus simple.

Tu pourrais contourner ton problème avec un peu d'algorithmie.
Par exemple, en passant par un tableau intermédiaire et un double parcours (1 fois pour construire le tableau de statistique, 1 autre fois pour afficher les données).
Cela ne serait pas beaucoup plus gourmand qu'une requête SQL complexe à mon avis et vu le contexte.

Par exemple, en ajustant ta boucle while, pour construire le tableau statistique :

$statistics = array();
while($data = mysql_fetch_array($req)) {
    if (! isset($statistics[$data[nb_test]])) {
        $statistics[$data[nb_test]] = 1;
    }    
    else {
        $statistics[$data[nb_test]] ++;
    }
}
Et puis après, tu peux jongler avec ce tableau pour afficher ce que tu souhaites :
foreach($statistics as $nombre_reservations => $nombre_personnes) {
	echo $nombre_personnes . ' personnes ont fait ' . $nombre_reservations . ' réservations<br />';
}
par jules [modérateur], 03/03/2012 à 09h26
Tester un programme peut démontrer la présence de bugs, jamais leur absence.

Merci beaucoup!

Je vais faire comme ça alors, votre aide m'est précieuse car j'étais encore loin de cette piste!

Un grand merci!

par Styleman, 04/03/2012 à 18h04
++ Styleman

répondre

  • nous contacter
  • mentions légales