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

SQL Procédural MySQL Discussion :

Importer des données depuis des fichiers csv dans MySQL


Sujet :

SQL Procédural MySQL

  1. #21
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2012
    Messages : 93
    Points : 29
    Points
    29
    Par défaut
    bonjour,

    desole je n'ai pas pu me cnnecter ce week-end.

    Combien y a t-il de stations ?
    Tu peux fournir le contenu des tables station et capteur ?
    je te joins le resultat du EXPLAIN SELECT et le contenu de la table station, il y a 16 stations, mais seulement 12 d'actifs sur une année.
    Pour le contenu de la table capteur je t'ai joins un fichier .php sinon je ne pouvais pas tout afficher.

    Fred, la procedure que tu m'as joints marche nickel. J'ai 2 questions qu'on m'a posé en rapport a cette requete :
    - il est possible que certain capteur soit supprimer ou rajouter. Du coup j'aurais un peu plus ou un peu moins de colonne, le chiffre entre parenthese dans la requete d'appel represente le nombre de capteur auquel la boucle fait appel, n'est ce pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CALL import_donnees(82);
    donc puis je adapter ma boucle, au nombre de capteur en place, en modifiant ce chiffre ?
    - j 'ai une requete d'update que je dois effectuer avant de lancer la procedure "import-donnees(82)" est ce possible de la mettre dans la procedure ?
    Images attachées Images attachées   
    Fichiers attachés Fichiers attachés

  2. #22
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Citation Envoyé par nrpfc Voir le message
    - j 'ai une requete d'update que je dois effectuer avant de lancer la procedure "import-donnees(82)" est ce possible de la mettre dans la procedure ?
    Tu pourrais mais je ne vois pas l’intérêt, car le temps de l'update puis de l'insert avec des "null" doit être équivalent au temps de l'insert avec des "'(null)'".
    Donc, soit tu modifies le "IS NOT NULL" de la procédure par "'(null)'".
    Ou mieux , tu te débrouilles pour importer directement des null.

  3. #23
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2012
    Messages : 93
    Points : 29
    Points
    29
    Par défaut [Résolu]
    ok donc faut juste que ej change cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    INSERT INTO relever_mesure(valeur, id_calendrier_calendrier, id_station_Stations, id_capteur_capteur)
    SELECT i.`',iter,'`,
           c.id_calendrier,
           i.id_station,
           ',iter,' 
    FROM import i
    INNER JOIN calendrier c ON i.date_heure = c.date_heure_locale
    WHERE i.`',iter,'` IS NOT NULL');
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    INSERT INTO relever_mesure(valeur, id_calendrier_calendrier, id_station_Stations, id_capteur_capteur)
    SELECT i.`',iter,'`,
           c.id_calendrier,
           i.id_station,
           ',iter,' 
    FROM import i
    INNER JOIN calendrier c ON i.date_heure = c.date_heure_locale
    WHERE i.`',iter,'` ='(null)'');
    et ben ça marche pas lol ça avais l'air trop simple ^^

    en plus c'est pas WHERE i.`',iter,'` ='(null)'');
    mais plutot WHERE i.`',iter,'` <>'(null)'');
    ou WHERE i.`',iter,'` !='(null)'');

    mais ça marche pas non plus

    Ok j'ai trouvé mon erreur il fallait mettre WHERE i.`',iter,'` !=`(null)`');

    merci

  4. #24
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2012
    Messages : 93
    Points : 29
    Points
    29
    Par défaut
    Bon ben non en faite ça marche pas ce que j'ai fait

    je pensais avoir resolu le probleme avec la procedure stockée mais en faite non

    je vous redonne la procedure

    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
    DELIMITER |
     
    DROP PROCEDURE IF EXISTS import_donnees|
    CREATE PROCEDURE import_donnees( nbCapteur INTEGER)
     
    BEGIN
     
    DECLARE iter INTEGER DEFAULT 0; 
     
    iterwhile: WHILE iter <= nbCapteur DO 
     
      SET @myInsert:= CONCAT('
    INSERT INTO relever_mesure(valeur, id_calendrier_calendrier, id_station_Stations, id_capteur_capteur)
    SELECT i.`',iter,'`,
           c.id_calendrier,
           i.id_station,
           ',iter,' 
    FROM import i
    INNER JOIN calendrier c ON i.date_heure = c.date_heure_locale
    WHERE i.`',iter,'` IS NOT NULL'); 
     
     
      prepare stmnt FROM @myInsert; 
      EXECUTE stmnt; 
      DEALLOCATE PREPARE stmnt;
     
     
       SET iter = iter + 1; 
    END WHILE iterwhile;
    END
    je pensais qu'en changeant cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE i.`',iter,'` IS NOT NULL');
    par celle ci
    WHERE i.`',iter,'` !=(null));
    j'aurai resolu le probleme et ben non.

    Donc ma procedure initiale fonctionne bien mais il faut :
    soit que je rajoute, dans cette procedure, le update de ma table import
    soit que je dise de ne pas prendre les valeurs=(null) au lieu de valeur=NULL

    j'avoue je bloque un peu

  5. #25
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2012
    Messages : 93
    Points : 29
    Points
    29
    Par défaut
    ok j'ai eu la solution,

    il fallait remplacer les ' par des "

    ce qui donne
    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
    DELIMITER |
     
    DROP PROCEDURE IF EXISTS import_donnees|
    CREATE PROCEDURE import_donnees( nbCapteur INTEGER)
     
    BEGIN
     
    DECLARE iter INTEGER DEFAULT 0; 
     
    iterwhile: WHILE iter <= nbCapteur DO 
     
      SET @myInsert:= CONCAT('
    INSERT INTO relever_mesure(valeur, id_calendrier_calendrier, id_station_Stations, id_capteur_capteur)
    SELECT i.`',iter,'`,
           c.id_calendrier,
           i.id_station,
           ',iter,' 
    FROM import i
    INNER JOIN calendrier c ON i.date_heure = c.date_heure_locale
    WHERE i.`',iter,'` <>"(null)"');
     
     
      prepare stmnt FROM @myInsert; 
      EXECUTE stmnt; 
      DEALLOCATE PREPARE stmnt;
     
     
       SET iter = iter + 1; 
    END WHILE iterwhile;
    END |
    DELIMITER ;
    CALL import_donnees(82);

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 12
    Dernier message: 12/07/2012, 21h15
  2. [MySQL] Importer les données d'un fichier CSV dans une base de données
    Par joueur dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/11/2008, 11h59
  3. Réponses: 45
    Dernier message: 14/02/2008, 15h41

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