Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/01/2012, 18h20   #1
Invité de passage
 
Inscription : mai 2007
Messages : 18
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 18
Points : 3
Points : 3
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
dandav55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 19h33   #2
Membre Expert
 
Avatar de kain_tn
 
Homme
Inscription : mars 2005
Messages : 577
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : mars 2005
Messages : 577
Points : 1 209
Points : 1 209
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 :
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 :
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;
}
kain_tn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 21h12   #3
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 874
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
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 : 874
Points : 1 361
Points : 1 361
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...

__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 16h04   #4
Invité de passage
 
Inscription : mai 2007
Messages : 18
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 18
Points : 3
Points : 3
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...

dandav55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 16h12   #5
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
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.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 17h23   #6
Invité de passage
 
Inscription : mai 2007
Messages : 18
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 18
Points : 3
Points : 3
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 :
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
dandav55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 18h45   #7
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 18h55   #8
Invité de passage
 
Inscription : mai 2007
Messages : 18
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 18
Points : 3
Points : 3
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
dandav55 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h20.


 
 
 
 
Partenaires

Hébergement Web