Surveiller ce forum | Commencer une nouvelle discussion Commencer une nouvelle discussion
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

?>

FEDER Powered By FusionForge Collaborative Development Environment Charte d'utilisation / Nous contacter / Mentions légales Haut de page