Calculer la somme de 3 requetes COUNT

Résolu/Fermé
fred81 - 18 févr. 2015 à 17:37
 fred81 - 19 févr. 2015 à 09:36
Bonjour,

Je me permet de vous poser une question sur laquelle je bute depuis ce matin. Je debute en sql.

Je travaille dans une association qui tient un fichier adhèrent fait il y a quelques années. Chaque adhèrent peut s'inscrire à plusieurs activité. Dans la base de données MYSQL il y a comme table :

nom_adh, Activite1 , Activite2, activite3, activite4..

Admettons que Paul s'est inscrit à 2 activités (informatique debutant (activite1) et informatique photo (activite2))
Que Céline s'est inscrit à la poterie (activite1) et informatique photo (activite2)
et que Pierre s'est inscrit qu'à informatique photo(activite1).

Mon but est de compter tous les membres participants aux activités par activités en prenant compte toutes les tables activites.

Ex: Informatique debutant : 1
Photo : 3
Poterie : 1

Est il possible de calculer plusieurs requête entre elles ?

Voici mon code :
$result = "SELECT COUNT(activite1) FROM adh WHERE activite1='ALLEMAND mardi 17h TARIF PLEIN'";
 if ($result_tvp = $mysqli->query("$result")) {
        /* determine number of rows result set */
        $total_tvp = $result_tvp->fetch_row();
        $total_tvp = $total_tvp['0'];
        /* close result set */
        $result_tvp->close();
    }

            echo "[ALLEMAND mardi 17h ] : <b>$total_tvp /10 Adhèrents</b> </a><br />";

		
$result = "SELECT COUNT(activite1) FROM adh WHERE activite1='ALLEMAND mardi 17h TARIF REDUIT'";
 if ($result_tvp2 = $mysqli->query("$result")) {
        /* determine number of rows result set */
        $total_tvp2 = $result_tvp2->fetch_row();
        $total_tvp2 = $total_tvp2['0'];
        /* close result set */
        $result_tvp2->close();
    }

            echo "[ALLEMAND mardi 17h ] : <b>$total_tvp2 /10 Adhèrents</b> </a><br />";
	
		
$result = "SELECT COUNT(activite1) FROM adh WHERE activite1='ALLEMAND mardi 17h TARIF CE'";
 if ($result_tvp3 = $mysqli->query("$result")) {
        /* determine number of rows result set */
        $total_tvp3 = $result_tvp3->fetch_row();
        $total_tvp3 = $total_tvp3['0'];
        /* close result set */
        $result_tvp3->close();
    }

            echo "[ALLEMAND mardi 17h ] : <b>$total_tvp3 /10 Adhèrents</b> </a><br />";

		
$result = "SELECT COUNT(activite1) FROM adh WHERE activite1='ALLEMAND mardi 17h gratuit'";
 if ($result_tvp4 = $mysqli->query("$result")) {
        /* determine number of rows result set */
        $total_tvp4 = $result_tvp4->fetch_row();
        $total_tvp4 = $total_tvp4['0'];
        /* close result set */
        $result_tvp4->close();
    }

            echo "[ALLEMAND mardi 17h ] : <b>$total_tvp4 /10 Adhèrents</b> </a>";



 ?>


Merci pour l aide

A voir également:

2 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
19 févr. 2015 à 01:58
Bonjour,

Il y a plusieurs choses qui me dérangent dans le fonctionnement du programme.....
déjà... la structure de la table....

Il vaudrait sûrement mieux que tu la modifies avant de continuer ton dev ...

tu pourrais faire, par exemple :
- Une table ACTIVITE dans laquelle tu stocke les différentes activités existantes ( id,titre_activite ...)

- Une table adhérent ( liste des adhérant...) (id,nom_adh,prenom_adh, ...)

- Une table Activites_adh ( table contenant la liste des activités auxquelles les adhérents sont inscrits) ( id, id_activite, id_adherant, numero_activite ....)

Cela permettra une meilleur gestion / conception / utilisation des requêtes......
Comme tu peux le voir également, la recherche d'activité pourra se faire via leur ID plutôt que leur libellé.... ( faire des where sur du texte est un très mauvais choix.... cela étant beaucoup plus consommateur de ressources et de temps pour l'exécution des requêtes ! )





0
Merci de m'aider.

Le soucis est que comme indiqué cette base de donnée est utilisé depuis des années et donc par conséquence il y a plus de 1500 adhérents inscrits. C'est sur qu'elle n'est pas du tout optimisée mais la personne qui a créé cette base ne pensé pas aux statistiques.

Comme tu l'a indiqué ce serait largement mieux est plus simple à l'emploi, mais je ne me voie pas basculer manuellement plus de 1500 adhérents d'une table à une autre.

L'alternative serait de pouvoir additionner le résultat de chaque requête avec du php :

$chiffre1 = "$total_tvp";
$chiffre2 = "$total_tvp2";
$chiffre3 = "$total_tvp3";

$resultat = $chiffre1 + $chiffre2 + $chiffre3;


Est-ce réalisable ? car quand j'essaye rien ne s'affiche. Il doit me manquer quelque chose qui permet à PHP de faire le lien avec le résultat de chaque requête sql

Edit : Après de longue minute j'ai compris mon erreur et maintenant tout marche. Il me manqué la fonction echo

	$chiffre1 = "$total_tvp";
$chiffre2 = "$total_tvp2";
$chiffre3 = "$total_tvp3";

$resultat = $chiffre1 + $chiffre2 + $chiffre3;

echo "ALLEMAND mardi 17h : <b>$resultat /10 Adhèrents</b> </a><br />";


j'ai cru que j'allais devenir chauve à force ! j'y ai passé toute la journée hier et la hop !

Merci encore de ton aide !
0