IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Compléter un fichier ascii importé dans une base SQL


Sujet :

PHP & Base de données

  1. #1
    Pgs
    Pgs est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Par défaut Compléter un fichier ascii importé dans une base SQL
    Bonjour,
    J'importe un fichier ascii dans lequel un champ contient le code permettant d'identifier la personne concernée par l'enregistrement.
    Dans ce fichier, les enregistrements sont classés par personne. Du coup, le code n'est mentionné que sur la première ligne se rapportant à chaque personne.
    Sur les lignes suivantes concernant cette même personne, ce champ est vide.
    Je voudrais recopier sur toutes ces lignes le code de la personne.
    Quel serait le traitement de plus rapide ?
    Dans l'hypothèse où il n'y ait pas de réponse en SQL, je poste aussi cette question dans ce forum.
    Merci

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 666
    Par défaut
    Qu'est ce que vous appelez un "champ" dans ce fichier ? Est ce que les données sont au format CSV ?

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Comment fais-tu ton import ? directement en SQL ou en lisant le fichier en PHP et en construisant des requêtes ?

    Au passage, une "base SQL", ça ne nous dit pas grand chose... Tu parles de MySQL peut-être ? ou SQL-Server ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Pgs
    Pgs est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Par défaut
    Bonjour,
    J'importe via load data un fichier csv ( ; ) dans une table MySql.
    Les enregistrement sont triés par personne et, pour chaque personne, seul le premier enregistrement contient une valeur dans le champ "code_personne".
    Pour les enregistrement suivants, tant qu'ils concernent cette personne, ce champ est vide.
    Dès que l'on passe à une autre personne, son code est indiqué dans le champ "code_personne" du premier enregistrement
    Puis, pour tous les enregistrements suivants de cette personne, ce champ est vide.
    Et ainsi de suite.
    Je pourrais balayer la table en php, et faire un update pour ajouter le code de la personne dans les enregistrements concernés.
    Mais je me demande s'il y a un moyen plus rapide.
    Merci

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Tu pourrais faire la totalité de l'import en PHP en lisant ton fichier avec fgetcsv, en mémorisant le code de la ligne et en faisant une comparaison avec la valeur précédente.

    ça pourrait donner quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    // connexion à la base
    $hostname = "localhost";
    $db = "la_base";
    $username = "user_db";
    $password = "password"; 
    try {
        $strConnection = 'mysql:host='.$hostname.';dbname='.$db; //Ligne 1
        $arrExtraParam= array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"); //Ligne 2
        $pdo = new PDO($connStr, $username, $password, $arrExtraParam); //Ligne 3; Instancie la connexion
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//Ligne 4
    }
    catch(PDOException $e) {
        $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
        die($msg);
    }
     
    $filepath = "test.csv"
     
     
    $code_personne = "";
    // requête préparée d'insertion, en supposant qu'on insère tous les champs du fichier, dans l'ordre du fichier
    $sql = 'INSERT INTO la_table (code_personne, champ2, champ3, champ4) VALUES (?, ?, ?, ?)';
    $stmt = $pdo->prepare($sql);
    if (($handle = fopen($filepath, "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
            // en supposant le code personne soit la 1ere colonne
            if (empty($data[0])) {
                // si la colonne est vide, on utilise la valeur mémorisée
                $data[0] = $code_personne;
            }
            // en supposant que les champs soient dans le même ordre dans la requête
            $stmt->execute($data);
            // on mémorise le code pour la ligne suivante
            $code_personne = $data[0];
        }
        fclose($handle);
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Pgs
    Pgs est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Par défaut
    Merci beaucoup,
    Je n'aurais jamais pensé que la lecture d'un fichier de données en php soit si rapide !!
    Bonne journée !

    P.S. Je viens de poster dans le forum SQL une question concernant le calcul, en sql, du nombre de jours - hors weekend - entre deux dates. Si tu as une idée...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Compléter un fichier ascii importé dans une base SQL
    Par Pgs dans le forum Langage SQL
    Réponses: 1
    Dernier message: 16/11/2017, 09h40
  2. Importer un fichier CSV automatiquement dans une base de données
    Par nabil123456 dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 19/05/2015, 11h23
  3. Importer un fichier mdb dans une base SQL serveur 2005
    Par arthuro45 dans le forum Outils
    Réponses: 10
    Dernier message: 08/06/2012, 14h53
  4. Réponses: 3
    Dernier message: 27/07/2007, 13h06
  5. [Strategie][Java][XML] Import dans une base de données
    Par nad dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 23/09/2002, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo