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 :

Script pour supprimer des données dans les tables à une date butoit


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut Script pour supprimer des données dans les tables à une date butoit
    Bonjour,

    Possesseur d'un site d'e-commerce existe-t-il un script pour supprimer dans les tables les plus lourdes comme connections, connections pages, connections sources, etc
    jusqu'à une date bien définie.
    Je désire supprimer les données par exemple au 31 12 2010

    Je ne connais pas le fonctionnement de mysql et recherche une personne qui
    pourrait m'aider en sens afin d'alléger le poids de ma base de données.

    Il s'agit d'un petit site 250 références et cette opération serait nécessaire 1 à 2 fois par an

    D'avance je vous remercie pour vos conseils et tous mes meilleurs voeux pour l'année 2012

  2. #2
    Expert éminent Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 622
    Points : 7 562
    Points
    7 562
    Par défaut
    Bonjour,


    En fait il s'agit plus ici d'un script système que d'un script lié à MySQL.

    Tu commences par écrire ton script en SQL et tu le sauvegarde dans un fichier.

    Pour exécuter ton script tu dois lancer un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql --user=user_name --password=your_password db_name < script.sql
    Il faut ensuite savoir sur quel Système d'exploitation fonctionne ton serveur (à priori Linux, Unix ou Windows).

    Si ton serveur fonctionne sous Linux (ou Unix), alors tu peut faire exécuter ton script SQL par un utilitaire appelé crontab. Il permet l'exécution d'une commande donnée de façon périodique: http://fr.wikipedia.org/wiki/Crontab

    Si tu le serveur fonctionne sous windows je pense que tu peux passer par le scheduler: http://windows.microsoft.com/en-US/w...chedule-a-task
    Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(int argc, char **argv) {
     
        printf("So long, and thanks for the fish, Dennis...\n");
        return 0;
    }

  3. #3
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    le "cron" est, en effet, ce qu'il te faut...

    je suppose que tu es en hébergement mutualisé...

    donc il faut d'abord regard dans ton interface de gestion si tu as accès au "cron" si non alors tu appelles ton hébergeur pour savoir si la fonction est disponible... là tu crées ton script...

    si tu ne peux pas alors l'idée serait de fabriquer une procédure stockée, que tu peux lancer depuis un petit script php (à ne pas exposer bien-sur), et à qui tu passes en paramètre la date limite que tu veux garder...

    tu peux, quoi qu'il en soit, faire une procédure stockée qui récupère automatique ment l'année en cours, et fait ton traitement à l'année-1 ou -2


    je te conseille de tester avant sur une version d'essai de tes tables... ça évite de pleurer...

    plutôt que de détruire ces données, je te conseille de les stocker plutôt dans une bd secondaire avant de le supprimer dans la base principale... ça te permet de faire un mécanisme d'archivage...

    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par ericd69 Voir le message
    le "cron" est, en effet, ce qu'il te faut...

    je suppose que tu es en hébergement mutualisé...

    donc il faut d'abord regard dans ton interface de gestion si tu as accès au "cron" si non alors tu appelles ton hébergeur pour savoir si la fonction est disponible... là tu crées ton script...

    si tu ne peux pas alors l'idée serait de fabriquer une procédure stockée, que tu peux lancer depuis un petit script php (à ne pas exposer bien-sur), et à qui tu passes en paramètre la date limite que tu veux garder...

    tu peux, quoi qu'il en soit, faire une procédure stockée qui récupère automatique ment l'année en cours, et fait ton traitement à l'année-1 ou -2

    Bonjour et merci pour la réponse,

    Malheureusement je ne connais rien du tout en Mysql.

    Je suis en serveur mutualisé chez 1and1 sur serveur Linux.

    Je cherche à alléger Mysql sur certaines tables en supprimant les données au 31 12 2010. Je sauvegarde toujours ma base de données avant toutes interventions ou je peux tester également en local.

    Je le dis je ne sais pas comment faire cette opération et mon site a été fait sous Prestashop dont le forum n'apporte aucune réponse précise sur ce sujet

    Je reste à votre disposition pour tous renseignements complémentaires

    Bien cordialement


    je te conseille de tester avant sur une version d'essai de tes tables... ça évite de pleurer...

    plutôt que de détruire ces données, je te conseille de les stocker plutôt dans une bd secondaire avant de le supprimer dans la base principale... ça te permet de faire un mécanisme d'archivage...


  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Côté Sql regardez du côté de la clause DELETE :
    http://sqlpro.developpez.com/cours/sqlaz/dml/#LIII

    Et vu que votre condition porte sur une date, il faudra surement que vous mettiez le nez dans la doc de MySql pour connaitre un peu les opérations sur les dates : http://dev.mysql.com/doc/refman/5.5/...functions.html

    Bon déjà un bon début.

    Ensuite une fois que vous vous serez un peu amusé avec tout ça, il va falloire que vous identifiez la / les colonnes de vos différentes tables qui pourraient vous donner l'information necessaire pour savoir si uen ligne est postérieur au 31 12 2010 ou pas.

    A partir de là vous pourrez construire vos différentes requêtes de purge.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut J'ai trouvé ce code testé en local
    Bonjour,

    J'ai trouvé ce code qui fonctionne bien sur la table concernée mais pas sur les autres tables, peut-être faut-il effectuer cette requête dans l'ordre des tables
    ps_connections
    ps_connections_page
    ps_connections_source

    etc

    Voici le code fonctionnant uniquement sur la table ps_connections_page

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE 
    FROM `ps_connections_page` 
    WHERE `time_start` < '2010-12-31 23:59:59'
    Que faut-il éventuellement modifier pour que cela fonctionne sur les tables volumineuses

    Bien cordialement

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Le nom de tes table laisse à penser que la table principale est ps_connections et que les deux autres ont une clé étrangère référençant l'identifiant de la connexion.
    Si c'est le cas, si les tables utilisent le moteur InnoDB et que tu as programmé les clés étrangères avec la contrainte d'intégrité ON DELETE CASCADE, alors la suppression dans ps_connections supprimera automatiquement les lignes correspondantes dans les deux autres tables.

    Si ceci n'est pas possible, il faut faire la requête sur chaque table.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Le nom de tes table laisse à penser que la table principale est ps_connections et que les deux autres ont une clé étrangère référençant l'identifiant de la connexion.
    Si c'est le cas, si les tables utilisent le moteur InnoDB et que tu as programmé les clés étrangères avec la contrainte d'intégrité ON DELETE CASCADE, alors la suppression dans ps_connections supprimera automatiquement les lignes correspondantes dans les deux autres tables.

    Si ceci n'est pas possible, il faut faire la requête sur chaque table.
    Oui effectivement je viens de trouver sur certaines tables, il faut inclure date_add et d'autres time_start

    J'ai testé en local et aucun problème pour les 3 tables citées plus haut, je vais pouvoir alléger le poids de ma BDD.

    Merci pour votre réponse et bonne soirée

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

Discussions similaires

  1. [AC-2010] Erreur pour supprimer des données dans une table liée
    Par marieo dans le forum Access
    Réponses: 2
    Dernier message: 19/03/2016, 10h00
  2. [MySQL] Organisation des données dans les tables
    Par beninsky dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 27/04/2010, 10h56
  3. utiliser formulaire pour enregistrer des données dans différentes tables
    Par silue fignigue siaka dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 11/04/2009, 13h53
  4. Réponses: 2
    Dernier message: 21/03/2008, 20h52
  5. supprimer des données dans plusieurs tables
    Par mnssylvain dans le forum Access
    Réponses: 4
    Dernier message: 28/01/2007, 19h06

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