query($query); $sectorMapping = $stmt->fetchAll(PDO::FETCH_ASSOC); if (empty($sectorMapping)) { echo "Aucun secteur n'a été migré. Veuillez d'abord migrer la table ope_sectors." . PHP_EOL; closeSshTunnel(); exit(1); } echo "Nombre de secteurs migrés : " . count($sectorMapping) . PHP_EOL; // Création d'un tableau associatif pour faciliter la recherche des correspondances $sectorMap = []; foreach ($sectorMapping as $mapping) { $sectorMap[$mapping['fk_old_sector']] = $mapping['id']; } // Création de la liste des IDs de secteurs pour la requête IN $oldSectorIds = array_keys($sectorMap); $oldSectorIdsStr = implode(',', $oldSectorIds); // Récupération des adresses liées aux secteurs migrés $query = " SELECT * FROM sectors_adresses WHERE fk_sector IN ($oldSectorIdsStr) "; $stmt = $sourceDb->query($query); $adresses = $stmt->fetchAll(PDO::FETCH_ASSOC); echo "Nombre d'adresses à migrer : " . count($adresses) . PHP_EOL; // Préparation de la requête d'insertion $insertQuery = "INSERT INTO sectors_adresses ( fk_adresse, osm_id, fk_sector, osm_name, numero, rue_bis, rue, cp, ville, gps_lat, gps_lng, osm_date_creat, created_at, updated_at ) VALUES ( :fk_adresse, :osm_id, :fk_sector, :osm_name, :numero, :rue_bis, :rue, :cp, :ville, :gps_lat, :gps_lng, :osm_date_creat, :created_at, :updated_at ) ON DUPLICATE KEY UPDATE fk_adresse = VALUES(fk_adresse), numero = VALUES(numero), rue_bis = VALUES(rue_bis), rue = VALUES(rue), cp = VALUES(cp), ville = VALUES(ville), gps_lat = VALUES(gps_lat), gps_lng = VALUES(gps_lng), updated_at = VALUES(updated_at)"; $insertStmt = $targetDb->prepare($insertQuery); // Compteurs $inserted = 0; $skipped = 0; $errors = 0; // Traitement de chaque adresse foreach ($adresses as $adresse) { $fkOldSector = $adresse['fk_sector']; // Recherche du nouvel ID de secteur if (!isset($sectorMap[$fkOldSector])) { echo "Secteur non trouvé pour l'ID $fkOldSector. Adresse ignorée.\n"; $skipped++; continue; } $fkNewSector = $sectorMap[$fkOldSector]; // Préparation des données pour l'insertion $adresseData = [ 'fk_adresse' => $adresse['fk_adresse'] ?? '', 'osm_id' => 0, // Valeur par défaut 'fk_sector' => $fkNewSector, 'osm_name' => '', // Valeur par défaut 'numero' => $adresse['numero'] ?? '', 'rue_bis' => $adresse['rue_bis'] ?? '', 'rue' => $adresse['rue'] ?? '', 'cp' => $adresse['cp'] ?? '', 'ville' => $adresse['ville'] ?? '', 'gps_lat' => $adresse['gps_lat'] ?? '', 'gps_lng' => $adresse['gps_lng'] ?? '', 'osm_date_creat' => '0000-00-00 00:00:00', // Valeur par défaut 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ]; try { // Insertion dans la table cible $insertStmt->execute($adresseData); $inserted++; // Affichage du progrès if ($inserted % 100 === 0) { echo "Progression : $inserted adresses migrées...\n"; } } catch (PDOException $e) { echo "Erreur lors de la migration de l'adresse (rowid " . $adresse['rowid'] . ", secteur $fkOldSector) : " . $e->getMessage() . "\n"; $errors++; } } echo "Migration terminée. $inserted adresses migrées avec succès, $skipped ignorées. $errors erreurs rencontrées." . PHP_EOL; // Fermer le tunnel SSH closeSshTunnel(); } catch (Exception $e) { echo "Erreur critique: " . $e->getMessage() . PHP_EOL; // Fermer le tunnel SSH en cas d'erreur closeSshTunnel(); exit(1); }