Surveiller ce forum | | Doublons dans les bureaux [ Répondre ] Par : Pierre VIVER on 2009-01-26 22:31 | [forum:97999] |
|
Ce script permet de résoudre les problèmes de doublons dans les bureaux. <?php /* Ce script permet de supprimer les doublons dans les numero_bureau pour les electeurs. On part sur le meme principe que le script traitant les doublons des numeros d'electeur pour chaque liste. */ // Connexion, sélection de la base de données $table = $argv[1]; #$table = 'demo32'; //Tableau qui contiendra les listes $liste = array(); //Connexion a la base de donnees $dbconn = pg_connect("host=localhost port=5432 dbname=".$table." user=openelec password=openelec") or die('Connexion impossible : ' . pg_last_error()); //On recupere les listes $requete = "SELECT liste FROM liste ;"; $resultat = pg_query($requete) or die('Échec requête : ' . pg_last_error()); //On renseigne dans le tableau $liste les numeros de listes. Un index = une liste while ($ligne = pg_fetch_array($resultat, null, PGSQL_ASSOC)) { array_push($liste, $ligne['liste']); }//fin while recupere liste //On recupere le nombre de bureaux. $requete = "SELECT MAX(code) FROM bureau ;"; $resultat = pg_query($requete) or die('Échec requête : ' . pg_last_error()); while ($ligne = pg_fetch_array($resultat, null, PGSQL_ASSOC)) { $nb_bureau = $ligne['max']; }//fin while recupere liste echo "table : $table\n"; echo "liste : ";print_r($liste); echo "nombre de buraux : $nb_bureau\n"; //On parcour chacune des listes $i_liste=0; while($i_liste < count($liste)){ //On parcours tous les bureaux de la liste for($i_bureau=1; $i_bureau <= $nb_bureau; $i_bureau++) { echo "bureau : $i_bureau\n"; echo "liste : $liste[$i_liste]\n"; //On recupere le numero de bureau maximum dans le bureau de la liste . C'est avec ce numero que l'on va pourvoir renumeroter les doublons. $requete = "SELECT MAX(numero_bureau) FROM electeur WHERE code_bureau = '".$i_bureau."' AND liste = '".$liste[$i_liste]."';"; $resultat = pg_query($requete) or die('Échec requête : ' . pg_last_error()); while ($ligne = pg_fetch_array($resultat, null, PGSQL_ASSOC)) { $max_num_ordre = $ligne['max']; $max_num_ordre_tmp = $ligne['max']; } echo "max bureau $i_bureau : $max_num_ordre\n"; //On parcours l'ensemble des numero_bureau for($i_num_ordre=1; $i_num_ordre <= $max_num_ordre; $i_num_ordre++){ do{ //On recupere des informations utile pour faire une comparaison sur les doublons $requete = "SELECT id_electeur, numero_electeur, numero_bureau, date_naissance, date_modif FROM electeur WHERE numero_bureau = '".$i_num_ordre."' AND code_bureau = '".$i_bureau."' AND liste = '".$liste[$i_liste]."';"; $resultat = pg_query($requete) or die('Échec requête : ' . pg_last_error()); $tmp = array(); $count=0; $trouve=false; //on recupere un des doublons, s'il y en a plusieurs while (($ligne = pg_fetch_array($resultat, null, PGSQL_ASSOC)) && $count <= 1) { if($count > 0) { $trouve=true; list($year, $month, $day) = split('[/.-]', $ligne['date_naissance']); list($year_tmp, $month_tmp, $day_tmp) = split('[/.-]', $tmp['date_naissance']); list($year_dm, $month_dm, $day_dm) = split('[/.-]', $ligne['date_naissance']); list($year_tmp_dm, $month_tmp_dm, $day_tmp_dm) = split('[/.-]', $tmp['date_naissance']); if($year > $year_tmp){ $tmp = $ligne; }//fin qui regarde qui est le plus jeune elseif($year_dm > $year_tmp_dm){ $tmp = $ligne; } elseif($ligne['id_electeur'] > $tmp['id_electeur']){ $tmp = $ligne; }//fin elseif qui regarde qui a le plus grand id_electeur }//fin if qui regarde si on a plusieur electeur avec le meme numero_ordre else{ $tmp = $ligne; }//premier tour de boucle $count++; }//fin while qui parcours les electeur avec le meme numero_ordre //s'il y a un doublon if($trouve) { $max_num_ordre_tmp++; //On met a jour son numero d'electeur $requete="UPDATE electeur SET numero_bureau = '".$max_num_ordre_tmp."' WHERE id_electeur = '".$tmp['id_electeur']."';"; echo "$i_num_ordre -> $requete \n"; $resultat = pg_query($requete) or die('Échec requête : ' . pg_last_error()); }//fin if qui met à jour //tant qu'on trouve des doublons on continue a traiter ce numero_bureau. }while($trouve); }//fin for qui parcours tout les numero de bureau //On met a jour les champs derniers numeros. if($max_num_ordre_tmp >= 1){ $requete="UPDATE numerobureau SET dernier_numero = '".$max_num_ordre_tmp."', dernier_numero_provisoire = '".$max_num_ordre_tmp."' WHERE bureau = '".$i_bureau."' AND liste = '".$liste[$i_liste]."';"; echo "$requete \n"; $resultat = pg_query($requete) or die('Échec requête : ' . pg_last_error()); echo "update : "; echo "$requete \n"; echo "\n"; }//fin if il y a un max }//fin for qui parcour les num de bureaux //On passe a la liste suivante. $i_liste++; }//fin while qui parcours les listes ?> |
|
