Requete compliquée (pour moi)

Paul59
Invité n'ayant pas de compte PHPfrance

11 juil. 2005, 22:08

Bonjour.


(Suis sous SQL & PHP)

Je souhaite réaliser une requete qui me permette de calculer le nombre de champs vides ou null par enregistrement

(je souhaite calculer un coefficient de "pertinence" de ma base)


D'avance Merci

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

11 juil. 2005, 22:41

(Suis sous SQL & PHP)
SQL est un langage, pas un SGBD
tu peux être "sous" MySQL, Oracle, postgres...
Je souhaite réaliser une requete qui me permette de calculer le nombre de champs vides ou null par enregistrement

(je souhaite calculer un coefficient de "pertinence" de ma base)
je me permet de demander une précision sur ce que tu veux faire exactement :

pour une colonne, compter le nombre de valeur nulle dans ta table
ou pour une ligne (un enregistrement) compterle nombre de colonnes nulles ?

Paul59
Invité n'ayant pas de compte PHPfrance

12 juil. 2005, 19:32

Je souhaite compter le nombre de champs vides par enregistrements

Mammouth du PHP | 19672 Messages

12 juil. 2005, 20:08

Ça va être difficile de simplement faire un count(). à première vue, tu vas devoir faire un count sur les colonnes avec des clauses WHERE pour chaque colonne...

Ceci dit, ça veut aussi dire que ta base est mal conçue. Quand on conçoit une base de données, on fait en sorte pour l'efficacité du système de limiter au maximum les possibilités de champs contenant des valeurs NULL

Donc il faudra peut-être bien revoir la structure générale de la base pour séparer tes tables en différentes entités distinctes.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Paul59
Invité n'ayant pas de compte PHPfrance

13 juil. 2005, 17:01

Ben pour les champs nulls de ma base, il fo connaitre le contexte

je fais un annuaire en ligne et je voudrais afficher en temps réel ce que j'appelle le "coefficient de pertinence" de la base
c'est à dire le nombre de champs vides par rapport aux nombre de champs contenants une valeur si tous les membres de l'annaire étaient à jour

Eléphant du PHP | 91 Messages

13 juil. 2005, 22:39

Je suppose que tu connais la liste de toutes tes colonnes

1/ Pour le taux par colonne

Code : Tout sélectionner

select ( 1-(count(*)-count(col1))/count(*) ) * 100 ) AS 'Tx_pertinence_col1' , ( 1-(count(*)-count(col2))/count(*) ) * 100 ) AS 'Tx_pertinence_col2' , ( 1-(count(*)-count(col3))/count(*) ) * 100 ) AS 'Tx_pertinence_col3' , ( 1-(count(*)-count(col4))/count(*) ) * 100 ) AS 'Tx_pertinence_col4' from MaTable


count(*) => nombre total de lignes
count(col1) => nombre total de lignes ayant une valeur différente de NULL dans la colonne col1
Donc
count(*)-count(col1) => Nombre de ligne ayant la valeur NULL dans col1
count(*)-count(col1) / count(*) => Ratio de ligne ayant la valeur NULL dans col1
Notre unvivers étant dans ce cas binaire et égale à 1
1 - ( count(*)-count(col1) / count(*) ) => ratio de ligne non NULL

Et puis *100 pour transformer Ration en %
2/ Si tu veux qu'un seul tx pour toute ta table

Code : Tout sélectionner

select ( ( 1-(count(*)-count(col1))/count(*) ) * 100 ) + ( 1-(count(*)-count(col2))/count(*) ) * 100 ) + ( 1-(count(*)-count(col3))/count(*) ) * 100 ) + ( 1-(count(*)-count(col4))/count(*) ) * 100 ) ) / 4 from MaTable