Reldan
Messages postés14Date d'inscriptionmercredi 27 octobre 2010StatutMembreDernière intervention27 mai 2013
-
27 mai 2013 à 13:56
denisbertin -
27 mai 2013 à 18:20
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Finalement je viens d'apporter la retouche suivante en fonction du message de jeanc_123 à une différence près le mot-clé array_key_exists avecun s, mais cette fois-ci le resultat sur une table conséquence 4000 enregistrement s'effectue très rapidement et même instantannément .merci jean pour cette précission. En effet ceci me permet de connaitre le nombre effectif d'enregistrement différent dans une même table.
print ("
recherche combien d_identifiant sont unique dans une table");
$query = "SELECT * FROM informe";
$result = mysql_query($query);
$table = array();
$count = 0;
//Ce script recherche combien d_identifiant sont unique dans une table SQL-Autor denis B.
if ($result)
{
print("*******************************");
while ($row = mysql_fetch_row($result))
{
//print($row[0]);
if( !array_key_exists( $row[1], $table ))
{
array_push($table,$row[1]);
}
}
print("
XXX Identifiant Unique_________________");
$count=0;
print("");
foreach ($table as $name)
{
print(", \".$name.\"
\");
if ($count%8==0) print(\"----
\");
$count+=1;
}
print("
");
print("Le nombre d'identifiant différent=".$count);
}
@JEANC_123 :
Pour répondre à la question précise posée :
"Permet ainsi d'extraire combien y a t-il d'identifiants différents dans un des champs d'une table." ,
un "distinctrow *" ne convient pas, cela ne lui donnerait pas le nombre d'identifiants différents dans un des champs d'une table.
Et il semble qu'il ne veuille connaître que le nombre d'enregistrements différents.
C'est vrai, on s'éloigne du code source, mais faire du code basé sur une requête sql avec des boucles, des tableaux ...
alors qu'une autre requête sql simple peut donner le résultat directement, c'est une question de philosophie.
MacGaliver
Messages postés146Date d'inscriptionvendredi 28 mai 2010StatutMembreDernière intervention21 juillet 20133 27 mai 2013 à 17:19
On peut aussi tenter ceci ( au moins sous MySql , si l'on recherche le nombre de valeurs distinctes de "monchamp" ) :
SELECT count(distinct monchamp) FROM memorize;
jeanc_123
Messages postés9Date d'inscriptionjeudi 20 juillet 2006StatutMembreDernière intervention 3 mars 2015 27 mai 2013 à 14:11
Bonjour,
Le bel exemple ... à ne pas faire !!!
Si on considère que la table "Memorisee" possède 1000 enregistrement avec 10% de doublons, la boucle foreach imbriquée dans le While va s'exécuter au mieux 45 000 fois (de tête).
Ne serait-ce pas plus facile (à partir de la ligne 11):
while ($row = mysql_fetch_row($result)){
//On pourrait même récupérer les doublons ...
}else{
$table['DOUBLONS'][$row[0]][] = $row;
}
/**
* Fin du While
*/
}
/**
* Et pour la sortie
*/
echo "Nombre d'Identifiants différents : ". count( $table ) ."
";
print_r( $table );
echo "
";
Bien sûr ce n'est qu'une première ébauche. Juste pour précision, dans les tables de bases de mes applications Web, rien que pour les contacts j'ai plus de 15000 enregistrements. Il y a 3 ans j'en avais moitié et j'avais procédé à peu près de la même façon. Chaque fois que j'ouvrais certaines page WEB, j'avais le temps de
- moudre le café,
- préparer la cafetière,
- attendre la fin de la préparation,
- boire le café (et attendre qu'il refroidisse),
- et j'avais encore du temps pour glandouiller.
Reldan
Messages postés14Date d'inscriptionmercredi 27 octobre 2010StatutMembreDernière intervention27 mai 2013 27 mai 2013 à 13:56
Tu as plus simple avec des fonctions natives.
en 3 lignes de codes :
array_column() pour extraire la bonne colonne
array_unique() pour dédoublonner
count() sur le résultat
27 mai 2013 à 18:20
print ("
recherche combien d_identifiant sont unique dans une table");
$query = "SELECT * FROM informe";
$result = mysql_query($query);
$table = array();
$count = 0;
//Ce script recherche combien d_identifiant sont unique dans une table SQL-Autor denis B.
if ($result)
{
print("*******************************");
while ($row = mysql_fetch_row($result))
{
//print($row[0]);
if( !array_key_exists( $row[1], $table ))
{
array_push($table,$row[1]);
}
}
print("
XXX Identifiant Unique_________________");
$count=0;
print("");
foreach ($table as $name)
{
print(", \".$name.\"
\");
if ($count%8==0) print(\"----
\");
$count+=1;
}
print("
");
print("Le nombre d'identifiant différent=".$count);
}
27 mai 2013 à 17:57
Pour répondre à la question précise posée :
"Permet ainsi d'extraire combien y a t-il d'identifiants différents dans un des champs d'une table." ,
un "distinctrow *" ne convient pas, cela ne lui donnerait pas le nombre d'identifiants différents dans un des champs d'une table.
Et il semble qu'il ne veuille connaître que le nombre d'enregistrements différents.
C'est vrai, on s'éloigne du code source, mais faire du code basé sur une requête sql avec des boucles, des tableaux ...
alors qu'une autre requête sql simple peut donner le résultat directement, c'est une question de philosophie.
27 mai 2013 à 17:19
Au passage j'en profite pour annoncer que "mysql_query" à été amélioré: "mysqli_query".
http://fr.php.net/manual/fr/ref.mysqli.php
Cordialement.
27 mai 2013 à 17:18
Et pour compléter, mysql est obsolète depuis 5.3 et plus supportée depuis 5.4.
27 mai 2013 à 15:21
En fait la syntaxe exacte est
SELECT DISTINCTROW * FROM MaTable;
Mais je pense qu'on commence à s'éloigner du contexte du code source.
27 mai 2013 à 14:51
SELECT count(distinct monchamp) FROM memorize;
27 mai 2013 à 14:11
Le bel exemple ... à ne pas faire !!!
Si on considère que la table "Memorisee" possède 1000 enregistrement avec 10% de doublons, la boucle foreach imbriquée dans le While va s'exécuter au mieux 45 000 fois (de tête).
Ne serait-ce pas plus facile (à partir de la ligne 11):
while ($row = mysql_fetch_row($result)){
// Si l'identifiant n'a pas été trouvé
if( !array_key_exist( $row[0], $table )){
$table[$row[0]][] = $row;
//On pourrait même récupérer les doublons ...
}else{
$table['DOUBLONS'][$row[0]][] = $row;
}
/**
* Fin du While
*/
}
/**
* Et pour la sortie
*/
echo "Nombre d'Identifiants différents : ". count( $table ) ."
";
print_r( $table );
echo "
";
Bien sûr ce n'est qu'une première ébauche. Juste pour précision, dans les tables de bases de mes applications Web, rien que pour les contacts j'ai plus de 15000 enregistrements. Il y a 3 ans j'en avais moitié et j'avais procédé à peu près de la même façon. Chaque fois que j'ouvrais certaines page WEB, j'avais le temps de
- moudre le café,
- préparer la cafetière,
- attendre la fin de la préparation,
- boire le café (et attendre qu'il refroidisse),
- et j'avais encore du temps pour glandouiller.
27 mai 2013 à 13:56
en 3 lignes de codes :
array_column() pour extraire la bonne colonne
array_unique() pour dédoublonner
count() sur le résultat