Surveiller ce forum | Commencer une nouvelle discussion Commencer une nouvelle discussion
Doublons dans les listes [ Répondre ]
Par : Pierre VIVER on 2009-01-26 22:28
[forum:97998]
Le script permet de rétablir les problèmes de doublons dans les listes.

<?php

/*
Si vous avez des doublons dans vos numeros de listes, ce script permet de les supprimer et de les replacer correctement.
Pour savoir qui est bien place et quels sont les doublons on compare les dates de naissance et l'id. Il se peut que l'on ait plusieurs doublons pour un meme numero, on fait alors une boucle pour chacun des numeros doubles.
A chaque fois qu'un doublon est trouve, on le place a la fin des electeurs, donc on incremente le numero d'electeur et on renseigne le numero de sequence. On doit faire cela pour chaque liste, notre premiere requete SQL permet de recuperer le nombre de listes.
*/

//Nom de la table
#$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


$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

//On parcour chacune des listes
$i_liste=0;
while($i_liste < count($liste)){

//On recupere le numero d'electeur maximum dans la liste . C'est avec ce numero que l'on va pourvoir renumeroter les doublons.
$requete = "SELECT MAX(numero_electeur) FROM electeur WHERE 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_electeur = $ligne['max'];
$max_num_electeur_tmp = $ligne['max'];
}//fin while qui prend le max

echo "max bureau $i_liste : $max_num_electeur\n";

//On parcour l'ensemble des numeros d'electeurs.
for($i_num_electeur =1; $i_num_electeur <= $max_num_electeur; $i_num_electeur++){

do{
//ce tableau va servir a recuperer des informations sur les electeurs
//afin de savoir qui est le doublon et qui est le doublone
$tmp = array();
//permet de savoir s'il y a des doublons
$count=0;
$trouve=false;

//Pour un numero_electeur on recupere, dans la liste, l'id.
$requete = "SELECT id_electeur, numero_electeur FROM electeur WHERE liste = '".$liste[$i_liste]."' AND numero_electeur = '".$i_num_electeur."' ;";

$resultat = pg_query($requete) or die('Échec requête : ' . pg_last_error());
//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;
if($ligne['id_electeur'] > $tmp['id_electeur'])
$tmp = $ligne;
}
else{
$tmp = $ligne;
}//premier tour de boucle
$count++;
}//fin while
//s'il y a un doublon
if($trouve){
$max_num_electeur_tmp++;
//On met a jour son numero d'electeur
$requete="UPDATE electeur SET numero_electeur = '".$max_num_electeur_tmp."' WHERE id_electeur = '".$tmp['id_electeur']."';";

$resultat = pg_query($requete) or die('Échec requête : ' . pg_last_error());

echo "pour le numero electeur : $i_num_electeur => $requete \n";

}//fin if trouve a true
//tant qu'on trouve des doublons on continue a traiter ce numero d'electeur.
}while($trouve);
}//fin for qui parcours les electeurs

//On met a jour les champs derniers numeros.
if($max_num_electeur_tmp >= 1){
$requete="UPDATE liste SET dernier_numero = '".$max_num_electeur_tmp."'WHERE liste = '".$liste[$i_liste]."';";

$resultat = pg_query($requete) or die('Échec requête : ' . pg_last_error());

echo "$requete \n";
}//fin if $max_num_electeur_tmp >= 1

//On passe a la liste suivante.
$i_liste++;

}//fin while qui parcours le tableau de liste


?>


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