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 :

UPDATE gros volume [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 8
    Par défaut UPDATE gros volume
    Bonjour,

    Je suis confronter a un problème. j’espère que vous allez pouvoir m'aider a le résoudre.

    J'ai :

    • 1 Boutique en ligne
    • 1 Base de donnée
    • 280 000 références
    • 100 000 images dont le nom correspond au références.



    Pour afficher seulement les produits ou je détient les images, j'ai mis en place dans ma table une colonne "display" quand elle est égale a 1, la ligne est lu.

    Je cherche une requête permettant de mettre a jour ma base de donnée et rendre égale la colonne "display" à 1

    j'ai tenter : "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     UPDATE catalogue SET display=1 WHERE id_article IN('xxx','xxx','xxx','xxx')
    "

    Je récupère la valeur de X, donc l’ensemble des fichiers, où je leurs soustrait l'extension avec une fonction PHP de cette façon :


    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
     $dir = "./image/pieces/";
    //  si le dossier pointe existe
    if (is_dir($dir)) {
     
       // si il contient quelque chose
       if ($dh = opendir($dir)) {
     
           // boucler tant que quelque chose est trouve
          while (($file = readdir($dh)) !== false) {
     
               // affiche le nom et le type
               $file=substr($file,0,4) ; // ENLEVE L EXTENSION " .jpg "
        		echo " ' ".$file." ' ";
    	}
       // on ferme la connection
        closedir($dh);
       }
     }
    Mais avec autant d'entrée (100 000) j'ai une erreur 2006 MYSQL HAS GONE AWAY, ce qui en sorte est tout a fait logique. Je n'est pas accès au configuration phpmyadmin, je suis en mutualiser chez 1and1.

    Auriez vous une alternative?

    Merci.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Ne pouvez-vous lancer la procédure par paquets de 10 ou 20 fichiers en mémorisant à chaque fois le dernier fichier traité ?
    De toute façon, votre requête avec 100 000 références sera trop longue pour être traitée ; vous êtes obligé de la couper en morceaux.

    Si c'est du one shot, vous pouvez d'ailleurs le faire avec 100 000 update et à chaque fois un fichier, donc mettre la requête UPDATE dans la boucle.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 8
    Par défaut
    Merci d'avoir repondu, traiter par lot de 10 sa me fait 10 000 operation manuel a effectué $$.

    L idée de la boucle me parait plus interessante, mais il faudrai pouvoir aussi metre en boucle l'affichage des fichier non?

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    S'il s'agit seulement de mettre à jour la BDD pour les articles qui ont une image associée, pourquoi voulez-vous afficher ces fichiers ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 101
    Par défaut
    Bonjour,

    Une solution pourrait-être d'insérer vos X dans une table temporaire pendant le parsing récursif des répertoire.

    Ensuite faire un seul UPDATE sur la table initiale par rapport à la table temporaire.

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 8
    Par défaut
    Lors de l'affichage je " SELECT * FROM catalogue " sa me retourne ~200.000 lignes.
    Néanmoin, je n'est que 100.000 images. Donc j'ai 100.000 articles sur mon site sans images.

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    J'ai peur que nous ne comprenions pas exactement votre besoin...

    Ce que je comprends, c'est que vous avez un répertoire avec des fichiers d'images et que vous voulez mettre à jour la base de données pour que les articles correspondants soient mis en association avec les images. Et vous n'aurez à faire cette opération qu'une seule fois. Par la suite, si vous ajoutez des images, c'est l'interface de gestion de votre boutique en ligne qui s'occupera de l'association entre article et image.

    La suggestion de Yellu est bonne : Avec votre procédure PHP, vous parsez le répertoire et stockez à la suite les identifiants des articles, obtenus à partir du nom des fichiers, dans un fichier texte délimité (type CSV). Ensuite vous importez ce CSV dans une table créée temporairement dans votre base de données. Il suffit ensuite de faire une requête UPDATE en une seule fois :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE catalogue c
    INNER JOIN temp t ON t.id = c.id_article
    SET c.display = 1

    Après vous pouvez supprimer la table temporaire.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. [SQL-Server] Gros volume d'informations
    Par berceker united dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 25/07/2006, 09h46
  2. Gérer le gros volume de données
    Par berceker united dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 21/07/2006, 19h29
  3. Comparaison de fichiers très gros volume
    Par tanys dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 27/06/2006, 23h58
  4. Optimisation MySQL pour gros volumes
    Par barns dans le forum Requêtes
    Réponses: 8
    Dernier message: 01/10/2005, 11h28
  5. [Gros volume] Optimisations ?
    Par Grubshka dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 21/04/2005, 10h50

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