IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Statistiques sur les données d'une table [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Statistiques sur les données d'une table
    Salut à tous !

    J'ai un soucis avec l'exploitation d'une base de donnée.
    Je m'explique
    J'ai une liste de personnes inscrites a un site.Pour chaque personne inscrite il y a un certains nombre de champs (exemple age, date de naissance,sexe,ville etc.....)Tous ces champs sont dans la meme table.

    Exemple
    Table 'inscrits'
    champs : id,nom,prenom,age,sexe,ville......

    J'ai une personne 'type' et j'aimerai savoir combien de personnes habitent dans la même ville qu'elle, combien sont du meme sexe, combien ont le meme prenom etc.et pouvoir récupérer les id de ces personnes afin de faire des stats du style:
    20% des personnes sont du meme sexe ont le même age et habitent la meme ville etcc que la personne 'type'.

    Je ne vois pas comment formuler ma requete.
    Faut-il faire une requete pour chaque champ?
    Est-ce qu'il y a un moyen de faire une seule requete ??
    Si oui comment ???

    Merci d'avance pour vos réponses

    JM

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Principe général, très classique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT COUNT(*) as Nb
    FROM inscrits
    WHERE age = $age
    AND ville = $ville
    AND sexe = $sexe
    ...
    Après tu adaptes la requête en fonction de ce que tu cherches.
    Si tu fais un formulaire pour paramétrer tes statistiques, tu récupères les champs de saisie de ce que tu veux compter puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = "SELECT COUNT(*) as Nb
    FROM inscrits
    WHERE 1";
     
    if($age != '') $sql .= " AND age = $age";
    if($ville != '') $sql .= " AND ville = $ville";
    if($sexe != '') $sql .= " AND sexe = $sexe";
    ...
    Comme ça tu as toutes les combinaisons possibles avec une seule requête paramétrable.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Ok je vois le principe
    Merci l'ami !

    @+

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    if($age != '') $sql .= " AND age = $age";
    if($ville != '') $sql .= " AND ville = $ville";
    if($sexe != '') $sql .= " AND sexe = $sexe";
    ...
    Comme ça tu as toutes les combinaisons possibles avec une seule requête paramétrable.[/QUOTE]

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Pour info voila le code que j'ai utilisé (et qui fonctionne)
    Si des fois quelqu'un a besoin d'un code similaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
     
    //requete ou on recupère les données de notre inscrit
    $requete=mysql_query("SELECT * FROM `inscrits` WHERE `mdp`='$pass' AND `pseudo`='$user'");
     
    while ($nb=mysql_fetch_array($requete))
    	{
    	$datenais=$nb['datenais'];
    	$sexe=$nb['sexe'];
    	$ville=$nb['ville'];
            }
     
    //les rubriques
     $tabrub=array();
    	$tabrub[0]="datenais";
    	$tabrub[1]="sexe";
            $tabrub[2]="ville";
     
    //les données qui proviennent de la requete de mon utilisateur type
    $tabcrit=array();
            $tabcrit[0]=$datenais;
    	$tabcrit[1]=$sexe;
            $tabcrit[2]=$ville;
     
    //on compte le nombre d'enregitrements totaux de la BDD
    $enrtotal= mysql_query("SELECT COUNT(*) FROM `inscrits`");  
    	$result= mysql_fetch_array($enrtotal);
     
    //+1 pour les besoins de la boucle plus loin
    	$result=$result[0]+1;
     
    //on compte le nombre de rubriques diférentes	
            $ctn=count ($tabrub);
     
     
    //on fait la requete dans 2 boucles	la première qui parcours la base suivant le nombre d'inscrits et la deuxième qui parcoure chaque enregistrement
    	for($i=1;$i<$result;$i++)
    	{	
    	for ($j=0;$j<$ctn;$j++)
    	{
    	$requ=mysql_query("SELECT `idinscrit` FROM `inscrits` WHERE `".$tabrub[$j]."`='".$tabcrit[$j]."' AND `idinscrit`!='".$id."'")or die (mysql_error());
     
    //on stocke les resultat dans un tableau
    	while ($nb=mysql_fetch_array($requ))
    		{
    		$idinscrit[]=$nb['idinscrit'];
    		}
    	}
    	}
     
    //onstocke le nombre de reponses distinctes dans un tableau
    	$tab=array_count_values($idinscrit);	
     
    //nombre total de resultats possibles (nbre d'inscrits*nombre de champs)
    	$tot=($result-1)*$ctn;
     
    //on affiche les resultats en pourcent
    	foreach($tab as $cle=>$valeurs)
    		{
    		$pourcent=ceil(($valeurs*100)/$tot);
    		print "l'ID n°".$cle." a ".$valeurs." resultats soit ".$pourcent."%<br>";
    		}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Projeter sur 12 mois les données d'une table
    Par Dendrite dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/04/2012, 15h24
  2. Problème pour lire les donnée d'une table externe
    Par mardoch dans le forum SQL*Loader
    Réponses: 6
    Dernier message: 17/07/2008, 16h41
  3. comment modifier les données d'une table à travers un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 12
    Dernier message: 19/07/2005, 09h51
  4. MySQL Administrator : modifier les données d'une table
    Par Robinounou dans le forum Outils
    Réponses: 4
    Dernier message: 13/07/2005, 17h21
  5. transformer les données d'une table .dbf vers ma BD
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 2
    Dernier message: 30/11/2004, 09h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo