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 :

LOAD DATE INFILE sur deux tables


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Homme Profil pro
    Touche à tout informatique autodidacte
    Inscrit en
    Janvier 2007
    Messages
    811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Touche à tout informatique autodidacte

    Informations forums :
    Inscription : Janvier 2007
    Messages : 811
    Par défaut LOAD DATE INFILE sur deux tables
    Bonjour,
    Sur ma base de données, je dois remplir deux tables (à partir d'un fichier xml) avec certaines règles.
    C'est pour une gestion de news.

    1. Je récupère d'abord l'ordre du dernier article paru (il ne peut en aucun cas s'agir du auto_increment, puisque l'ordre peut être changé "manuellement")

    2. Je remplis ma table d'articles avec, par exemple :
    Le titre, la date, l'ordre, le lien....

    3. Une fois l'enregistrement inséré, si l'article doit contenir un tag, je récupère l'id de l'enregistrement qui me servira à insérer un nouvel enregistrement dans la tables des tags.

    Ma question: actuellement, je fais cette opération pas par pas, c'est à dire que j'insère article par article et je vérifie s'il doit être taggé et par quel indicatif (important, moyen, ou pas de tag).

    Auriez vous une idée sur la procédure à suivre pour que ceci se fasse avec un LOAD DATE INFILE qui est beaucoup plus rapide que INSERT.

    A chaque jour, j'ai dans les 60 articles à insérer et cette opération prend quand même une dizaine de minutes avec la méthode pas par pas.

    Merci à vous.

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2011
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 50
    Par défaut
    Procédure à tester
    1. Place le contenu du fichier dans une variable (fopen, fget)
    2. Décortique le contenu du fichier ligne par ligne dans un array 2D(boucle)
    3. Pour chaque ligne (boucle):
    - Efface le retour chariot $newligne = $ligne sans le '\n' à l'aide de STRING_REPLACE ou l'autre fct qui enlève les derniers caractères dont je sais plus le nom.
    - Vérifie le tag
    - Ajoute le tag à chaque ligne à l'aide de la concatenation $newligne.",".$tag."\n"
    4. Réécris un fichier temporaire avec le nouveau contenu
    6. Load the data à partir du fichier temporaire
    7. Efface le fichier le temporaire.


    Je suis vraiment pas sûr que ce soit la meilleure solution.

  3. #3
    Membre émérite
    Homme Profil pro
    Touche à tout informatique autodidacte
    Inscrit en
    Janvier 2007
    Messages
    811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Touche à tout informatique autodidacte

    Informations forums :
    Inscription : Janvier 2007
    Messages : 811
    Par défaut
    Bonjour,
    Une idée m'est venue avant de dormir (eh,oui! c'est toujours le meilleur moment)
    Je vais séparer mes données à insérer en deux fichiers distincts.
    Ceux qui ne contiennent pas de tags seront dans un seul fichier txt que je vais faire passer par LOAD DATE INFILE.
    Ceux qui contiennent des tags donc qui doivent inscrire dans deux tables différentes passeront par le pas par pas.

    pour KstorTroy,
    Mon problème réside dans le fait qu'un article contenant un tag doit avoir son id inscrit dans la tables des tags en plus d'être enregistré dans la table des articles.

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2011
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 50
    Par défaut
    tag doit avoir son id inscrit dans la tables des tags en plus d'être enregistré dans la table des articles.
    J'avais zappé ça, c'est inscrit dans le titre en plus ! ^^
    En effet, j'aurais fait ça aussi: une séparation de 2 fichiers distincts à partir du premier.
    Par contre, plutôt qu'un LOAD et un INSERT, j'aurais fait 2 LOAD's histoire de pas règler le problème qu'à moitié ! ^^
    Les 2 solutions sont à essayer et à comparer.

    C'est toujours avant d's'endormir qu'on a une idée et qu'on peut plus dormir après ! ^^

    C'est dommage que LOAD DATA ne soit pas un peu plus paramétrable.

  5. #5
    Membre émérite
    Homme Profil pro
    Touche à tout informatique autodidacte
    Inscrit en
    Janvier 2007
    Messages
    811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Touche à tout informatique autodidacte

    Informations forums :
    Inscription : Janvier 2007
    Messages : 811
    Par défaut
    Bonjour,
    Pour mieux comprendre, je simplifie un peu le code que j'utilise.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Dans une boucle de traitement de mon fichier texte
    $query = 'INSERT INTO `articles` (`id`,`titre`,`texte`) VALUES (Null,'.$titre.','.$texte.')';
    $result = mysql_query($query,$connection);
    $le_id=mysql_insert_id();
    $req_sup="INSERT INTO `tags` (`id`,`tag_id`,`article_id`) VALUES (Null,'1','$le_id')";
    $result2 = mysql_query($req_sup,$connection);

    en prenant en considération que tag_id est variable selon certain critères.

    Donc, il est clair que je ne peux pas faire passer ce type de traitement dans un LOAD. Surtout que j'utilise LAST_INSERT_ID.

Discussions similaires

  1. LOAD DATA INFILE sur table avec AUTO_INCREMENT PRIMARY KEY ?
    Par ctobini dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/10/2007, 11h00
  2. Cumul sur deux tables
    Par lper dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/11/2004, 15h02
  3. Comptez sur deux tables en même temps
    Par genova dans le forum Langage SQL
    Réponses: 12
    Dernier message: 13/09/2004, 18h58
  4. trigger sur deux tables
    Par Shabata dans le forum Développement
    Réponses: 4
    Dernier message: 04/05/2004, 16h55
  5. 2 Count() sur deux tables en jointures gauches
    Par Alexandre T dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2003, 16h53

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