[RESOLU] Calcul pourcentage colonnes vides

Eléphant du PHP | 233 Messages

31 juil. 2017, 17:22

Bonjour à tous,
je voudrais calculer le pourcentage de remplissage d'une ligne de ma table.
Il y a dans ma table 11 données qui sont facultatives sur les 35 que contient la table.
id, nom, email etc...jusqu'à 35
Comment je peux calculer en pourcentage en fonction des "champs" vides et ceux qui ne le sont pas :?:

J'utilise mysqli pour ma connexion :
$sql=mysqli_query($bdd, "SELECT * FROM ma_table WHERE url='".$_SESSION['url']."'")or die(mysqli_error($bdd));
$a=mysqli_fetch_assoc($sql);

Merci de votre aide

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

01 août 2017, 11:06

Bonjour,

Voici un exemple fonctionnel sur 4 champs :
SELECT id, prenom, nom, 
ROUND(100-(ISNULL(NULLIF(prenom,'')) + ISNULL(NULLIF(nom,'')) + ISNULL(NULLIF(email,'')) + ISNULL(NULLIF(pays,'')))*100/4) AS taux_de_completion
FROM `ma_table` WHERE 1
Le schéma+données de la table de test :
CREATE TABLE IF NOT EXISTS ma_table (
  id int(11) NOT NULL AUTO_INCREMENT,
  prenom varchar(50) DEFAULT NULL,
  nom varchar(50) DEFAULT NULL,
  email varchar(50) DEFAULT NULL,
  pays varchar(50) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;


INSERT INTO ma_table VALUES(1, 'Peter', 'Johnson', '', 'Etats-Unis');
INSERT INTO ma_table VALUES(2, 'Pierre', 'Dupont', '[email protected]', 'France');
INSERT INTO ma_table VALUES(3, 'Robert', 'Leman', '', NULL);
INSERT INTO ma_table VALUES(4, 'Elizabeth', 'Deux', '[email protected]', '');
INSERT INTO ma_table VALUES(5, 'Hans', 'Grum', '[email protected]', '');

Voici la formule que j'ai mise en place qui calcule de le taux de complétion :
:arrow: ROUND(100-(ISNULL(NULLIF(prenom,'')) + ISNULL(NULLIF(nom,'')) + ISNULL(NULLIF(email,'')) + ISNULL(NULLIF(pays,'')))*100/4) AS taux_de_completion

Le principe est de calculer le nombre de champs vides pour chaque ligne, et de faire un calcul de pourcentage ensuite.

- " ROUND() " : c'est pour faire un arrondi pour ne pas avoir de chiffres derrière la virgule.
- " 100- " : C'est pour avoir le taux de complétion, car sans cela on aurait le taux de champs vides
- " ISNULL(NULLIF(prenom,'')) " : Là c'est le côté un peu tricky de la formule, c'est ce qui permet de retourner 1 si le champ est vide ou null
- " *100/4 " : C'est pour calculer le pourcentage, 4 ici correspond au nombre de champs sur lequel je fais le test 4 dans mon cas, 35 dans le tien
- " AS taux_de_completion " : C'est pour donner un nom + explicite au champ de résultat que tu vas récupérer
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 233 Messages

01 août 2017, 15:22

Bonjour,
super génial, je ne connaissais pas ! :)
Un grand merci pour cette explication au combien détaillée.
Là on sait se que l'on fait =D>