2010-06-11 3 views
0

mon site a beaucoup de recherches entrantes qui sont stockées dans une base de données pour montrer les requêtes récentes sur mon site. En raison des requêtes de recherche élevées, ma base de données prend de l'ampleur. donc ce que je veux, c'est que je dois garder seulement les requêtes récentes dans la base de données disent 10 enregistrements. Cela maintient ma base de données petite et les requêtes seront plus rapides.Comment supprimer un enregistrement dans un tableau en conservant certaines données?

Je suis capable de stocker des requêtes entrantes dans la base de données mais je ne sais pas comment limiter ou supprimer les données excédentaires/anciennes de la table.

aucune aide ??

bien j'utilise PHP et MySQL

Répondre

0

Vous devez écrire un script PHP, qui sera lancé par CRON (ie. Une fois par jour) et déplacer des données de la table principale TableName pour archiver la table TableNameArchive avec exactement le même structure. que SQL dans le script devrait ressembler à:

INSERT INTO TableNameArchive 
SELECT * FROM TableName WHERE data < '2010-06-01' //of course you should provide here your conditions 

suivant, vous devez supprimer les anciens enregistrements de TableName.

1

J'espère que vous avez une colonne d'horodatage dans votre tableau (ou que vous avez la liberté d'en ajouter une). AFAIK, vous devez ajouter l'horodatage explicitement lorsque vous ajoutez des données à la table. Ensuite, vous pouvez faire quelque chose le long des lignes de:

DELETE FROM tablename WHERE timestamp < '<a date two days in the past, or whatever'>;

Vous auriez probablement envie de faire tout ce périodique, plutôt que chaque fois que vous ajoutez à la table. Je suppose que vous pouvez également limiter la taille aux dix enregistrements les plus récents en vérifiant la taille de la table chaque fois que vous êtes sur le point d'ajouter une ligne et en supprimant l'enregistrement le plus ancien (à nouveau, en utilisant la colonne timestamp) si l'ajout du nouvel enregistrement le rend trop grand.

La réponse de Falkon est bonne - bien que vous ne souhaitiez pas avoir votre archive dans une table, en fonction de vos besoins pour les données médico-légales. Vous pouvez également configurer un travail cron qui utilise simplement mysqldump pour faire une sauvegarde de la base de données (avec la date dans le nom de fichier), puis supprimez les enregistrements en trop. De cette façon, vous pouvez facilement faire des sauvegardes de vos anciennes données, ou les rechercher avec n'importe quel outil, et votre base de données reste petite.

Questions connexes