LE SCRIPT PHP DE RECHERCHES DES DIFFERENCES

Reldan Messages postés 14 Date d'inscription mercredi 27 octobre 2010 Statut Membre Dernière intervention 27 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.

https://codes-sources.commentcamarche.net/source/55179-le-script-php-de-recherches-des-differences

denisbertin
27 mai 2013 à 18:20
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és 146 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 21 juillet 2013 3
27 mai 2013 à 17:19
Bonjour,

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.
bj33 Messages postés 145 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 1 mai 2012
27 mai 2013 à 17:18
Salut

Et pour compléter, mysql est obsolète depuis 5.3 et plus supportée depuis 5.4.
jeanc_123 Messages postés 9 Date d'inscription jeudi 20 juillet 2006 Statut Membre Dernière intervention 3 mars 2015
27 mai 2013 à 15:21
@ACH1960

En fait la syntaxe exacte est
SELECT DISTINCTROW * FROM MaTable;

Mais je pense qu'on commence à s'éloigner du contexte du code source.
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és 9 Date d'inscription jeudi 20 juillet 2006 Statut Membre Derniè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)){

// 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.
Reldan Messages postés 14 Date d'inscription mercredi 27 octobre 2010 Statut Membre Dernière intervention 27 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
Rejoignez-nous