Version complète: sur le forum Webmaster Hub : effacer les anciens enregistrements sur MySQL
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
ams51
Bonjour,
J'ai une table MySQL sur laquelle je place des données toutes les 5minutes. En 2 jours elle devient énorme et ça me pose des problèmes (vue qu'elle doit tourner 24/24 toute l'année).
Je voudrais effacer tous les anciens enregistrements et ne garder que les 50000 derniers.... j'ai peur de faire une boulette et de faire l'inverse de ce que je veux... blush.gif

rq : je peux mettre un champ $id qui s'incrémente à chaque enregistrement... mais je pense que ce compteur devienne rapidement trop grand.

Est ce qu'il y a une solution miracle ?
Dan
Salut ams51,

Quels sont les champs que tu as dans cette table ? As-tu un timestamp?
ams51
Les champs :
$nom, $date, $time ,$data1, $data2, $data3...
$date et $time sont la date et l'heure d'enregistrement. il peut y en avoir plusieurs identiques car je peux faire plusieurs enregistrements simultanés.
Les autres champs sont du texte ou des chiffres.

Comme je l'ai dit je peux mettre un compteur ($id) mais en dernier recours

C'est quoi un timestamp ?
Dan
Le timestamp est un format Unix/mySQL qui permet d'identifier l'heure précise de l'insertion. Le format est différent car dans la plus grande précision (14), mySql le représente sous la forme YYYYMMDDHHMMSS.

Comme les valeurs sont stockées sous forme d'entier non signé et représentent le nombre de secondes depuis le 1er janvier 1970, à 0H GMT (the epoch) elles ne pourront pas contenir de dates passé l'année 2037 wink.gif

Mais si tu enregistres plusieurs valeurs simultanément, le timestamp risque de ne pas être unique.

J'avais compris que tu créais un enregistrement toutes les 5 minutes.

Dan
Anonymus
1/ Un conseil, fais une copie de la base, et teste ta requète sur une base en local.

2/ Le problème, c'est que tu n'as pas d'identifiants à tes tables. Tu ne peux comparer un champ avec l'autre, pour avoir l'ordre par exemple.

3/ Les champs 'date' ne sont pas forcément valables pour ce genre de manipulations. De plus, on ne sait pas sous quelles formes ils se présentent (DDMMYYYY, ou YYMMDD, ..)

4/ Mets un champ id si tu veux éviter tout problème.

5/ Ensuite, les requètes ressembleront à ceci :
En premier :
select id from table order by 1 desc limit 0,5000

Là, tu récupères le dernier id (last_id)

Puis :
delete from table where id<last_id

Voilà.
ams51
Merci...
je vais donc mettre le champ id
Ex-floodeur
CITATION(Dan @ jeudi 17 février 2005, 18h08)
Comme les valeurs sont stockées sous forme d'entier non signé et représentent le nombre de secondes depuis le 1er janvier 1970, à 0H GMT (the epoch) elles ne pourront pas contenir de dates passé l'année 2037 wink.gif

on fera comment en 2037 alors ?
Dan
D'ici là on sera plus que probablement passée aux systèmes 64 bits de base. wink.gif
Mais en attendant, les sytèmes Unix/Linux n'avaient pas à craindre le bug de l'an 2000 laugh.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.