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

Requêtes MySQL Discussion :

Comparer le contenu d'une table avec un fichier csv


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Comparer le contenu d'une table avec un fichier csv
    Bonjour,

    - Je rempli ou met à jour une table nommée "stock" par le biais d'un script php qui vient lire un fichier csv : Cette étape est parfaitement ok.

    - La table "stock" contient les champs suivants :
    ref | code_article | designation | stock

    - Mon problème :
    Il arrive dans le fichier csv, que certaines lignes n'apparaissent plus (en fait, lorsque le stok est à 0 ou bien que l'article ne se fait plus, la ligne n'est plus retranscrie dans le fichier csv)

    - Mon but :
    Comparer le contenu de la table "stock" avec le contenu du fichier csv, par le biais du champ "code_article". Et donc si le fichier csv ne contient plus ce "code_article" alors détruire la ligne du "code_article" dans la table "stock".

    Quelqu'un aurait-il une idée pour réaliser celà ?
    Merci de votre intérêt !


    ----------------------------------------------------------------
    - Voici le script php mis en place :

    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
    // ouverture du fichier en lecture
    if (file_exists(stocks.csv))
     $fp = fopen("$nom_fichier", "r");
    else{
     echo "Fichier introuvable !<br>Importation stoppée.";
     exit();
    }
    
    // importation
    while (!feof($fp)){
     $ligne = fgets($fp,4096);
     $liste = explode(";",$ligne);
    $ref = $liste[0];
    $code_article = $liste[1];
    $designation = $liste[2];
    $stock  = $liste[3];
    
    // Lecture de la table
    $sql = "SELECT code_article FROM stock WHERE code_article='$code_article'";
    $resultat = mysql_query($sql);
    $row = mysql_num_rows($resultat);
    
    // Si le "code_article" n'existe pas, on l'insère
    if ($row == 0) {
    $sql2 = "INSERT INTO stock VALUES(\"$ref\",\"$code_article\",\"$designation\",\"$stock\")";
    
    // Sinon on le met à jour
    } else  {
    $sql2 = "UPDATE stock SET stock = '$stock' WHERE code_article='$code_article'";
    
    // On ferme le tout
    }
    $resultat2 = mysql_query($sql2);
    }
    fclose($fp);
    mysql_close();

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Bonjour,

    Une solution pourrait consister à charger le fichier CSV dans une table temporaire, puis faire une jointure externe entre la table stock et la table temporaire pour repérer les lignes de la table stock sans correspondance dans la table temporaire et ainsi les supprimer.

    En supposant que la table temporaire s'appelle stock2 et qu'elle a la même structure que la table stock, on isole les lignes absentes du CSV par la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT s.code_article
    FROM stock s
    LEFT JOIN stock2 s2 ON s.code_article = s2.code_article
    WHERE s2.code_article IS NULL
    Pour supprimer dans stock les lignes absentes du fichier, il suffit alors de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DELETE s
    FROM stock s
    LEFT JOIN stock2 s2 ON s.code_article = s2.code_article
    WHERE s2.code_article IS NULL
    Cette requête est tirée de la FAQ .

    ced

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Tout d'abord merci beaucoup pour cette réponse précise et très rapide !

    Cette idée est très ingénieuse, et je vais de ce pas la tester !

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Nickel !!
    Mon pble est résolu : tout fonctionne parfaitement !

    Un très grand merci !

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

Discussions similaires

  1. [MySQL] masquer le contenu d'une table avec php
    Par melodide dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 03/05/2010, 15h03
  2. [AJAX] afficher le contenu d'une table avec ajax
    Par anouarsurvive dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/10/2008, 12h26
  3. afficher le contenu d'une table avec ajax
    Par anouarsurvive dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/10/2008, 11h11
  4. modifier le contenu d'une table avec innerHTML
    Par francon81 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 31/05/2005, 09h02
  5. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46

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