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 :

Requete UPDATE et CSV


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 193
    Points
    193
    Par défaut Requete UPDATE et CSV
    Bonjour.

    Je possède un CSV que je parcours et dont j'aimerais UPDATE certains champs de ma BDD mysql par rapport à ce fichier.

    J'ai déjà bien avancé.
    J'ai fait ceci qui coupe en ligne et en colonne le CSV.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for ($i=1;$i<$nblignes;$i++)
             {
    		  $j=0;
    		  $ligne=$tableau[$i][0];	// une ligne 
    		  $colonne[$j]=explode(",",$ligne);//decoupage de la ligne par rapport à la virgule
    		  for ($j=0;$j<94;$j++) { // 94 champs de la table
    		  //$colonne[0][0]; l'ID du prospect
    		  echo $colonne[0][$j];  // affichage des colonnes
     
    		 } 
    		}
    Avec ceci j'affiche bien chaque colonne de chaque ligne.

    J'aimerais placer dans toutes ces boucles une requete qui m'update chaque ligne avec chacun des champs de chaque colonne.

    Je n'arrive pas à m'en sorti.
    SI vous avez des indications.

    Je suis preneur.

    Cordialement

  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Bonjour,

    Est ce que le nombre de colonnes (94) est fixe et l'ordre des colonnes fixe aussi?
    Parce qu'il va falloir associer a chaque colonne dans ta boucle le nom de la colonne dans la table associée. Exemple avec trois colonnes:

    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
     
    // connexion a la bdd
     
    // il faut associer un numéro de colonne dans le csv
    // avec un nom de champ dans ta table:
    $colonnesName = array("Id", "Date", "Heure");
     
    // pour chaque ligne
    for ($i=1;$i<$nblignes;$i++)  
    {  
    $j=0; 
    // une ligne
    $ligne=$tableau[$i][0];   
    //decoupage de la ligne par rapport à la virgule  
    $colonne[$j]=explode(",",$ligne);
     
    // début de la requete
    $requete = "UPDATE matable SET ";
    // Pour chaque champ de la table
    for ($j=0;$j<count($colonne);$j++) 
    { 
    // Pour chaque colonne on va concaténer la valeur et le nom de la colonne
    // a notre requete
    $requete .= " " . $colonnesName[$j] . " = '" . $colonne[$j] . "', ";
    } 
     
    // On a construit la requete donc on l'effectue 
    mysql_query($requete) or die("Erreur !!<br/> Requete : $requete<br/>Erreur: " . mysql_error());
    }
    Voila en gros l'idée, j'espère avoir été compréhensible...

    EDIT: et j'ai peur que tu aies quelques soucis quant aux types des champs, par exemple pour les nombres il ne faut pas de quote, il va a mon avis falloir prévoir un second indice dans ton tableau qui va associer pour chaque champ si la valeur doit prendre des quotes ou pas

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 193
    Points
    193
    Par défaut
    Merci koopajah.

    Sur un autre forum j'ai trouvé une solution assez enorme.

    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
     
     
          LOAD DATA LOW PRIORITY INFILE 'tonFichier.csv'
     
          REPLACE
     
            INTO TABLE tatable
     
            CHARACTER SET tonCharset
     
            FIELDS
     
              TERMINATED BY ','
     
              ENCLOSED BY ''
     
              ESCAPED BY '\\'
     
            LINES
     
              TERMINATED BY 'tonCaractereDeFindeLigne'
    VOus en pensez quoi?

    Merci

  4. #4
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    ah bah oui c'est une solution qui permet d'importer de manière automatique un csv vers mysql (phpmyadmin le fait par exemple)

    je pensais que tu voudrais peut etre faire des traitements particuliers sur certaines valeurs en fait!

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 193
    Points
    193
    Par défaut
    Rassure toi koopajah, ta solution convient le mieux à mon cas.
    Mais j'aurais juste voulu savoir si avec le load data on pouvait préciser quel ligne de ma base on doit remplacer?

    Merci

  6. #6
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Bonne question, je dirai que le LOAD DATA INFILE fait un insert plutot qu'un update mais ca reste a vérifier:
    http://dev.mysql.com/doc/refman/5.0/en/load-data.html

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par koopajah
    Bonne question, je dirai que le LOAD DATA INFILE fait un insert plutot qu'un update mais ca reste a vérifier:
    http://dev.mysql.com/doc/refman/5.0/en/load-data.html
    J'ai cru comprendre comme toi.

Discussions similaires

  1. Requete UPDATE !!!
    Par fages dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/07/2004, 16h52
  2. [SYBASE] optimisation requete UPDATE
    Par metheorn dans le forum Sybase
    Réponses: 8
    Dernier message: 24/05/2004, 17h01
  3. [version] Requete Update avec différentes versions de mySQL
    Par regbegpower dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/01/2004, 17h19
  4. Requete update
    Par gianfare dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/10/2003, 09h04
  5. [debutante] erreur requete update
    Par LineLe dans le forum ASP
    Réponses: 5
    Dernier message: 12/09/2003, 13h05

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