8795 sujets
Hello,
En effet, je voulais dire un truc dans ce goût là. En revanche les deux requêtes ne fonctionnent pô. Mysql n'accepte pas que la sous-requête soit basée sur la même table apparemment. MAX est lourd en ressource ?
@sff : Je pense que tu devrais mettre sur le forum la structure de ta table « rpg_news ». Comme je l'ai précisé précédemment, pourquoi veux tu supprimer des données ? Manque de place ? Je ne sais pas si c'est judicieux de la faire.
Il me vient deux petites idées (arf).
* Regarder si en supprimant les données antérieures à un temps précis ça ferait l'affaire.
* lorsque tu fais un ajout dans ta table, tu récupères l'id et tu exécutes de suite une autre requête basée sur cet identifiant récupéré (id - 6).
Heyoan a écrit :
Ce serait plutôtet c'est à éviter car lourd en ressources.DELETE FROM une_table WHERE id < (Select MAX(id) FROM une_table) - 6;
En effet, je voulais dire un truc dans ce goût là. En revanche les deux requêtes ne fonctionnent pô. Mysql n'accepte pas que la sous-requête soit basée sur la même table apparemment. MAX est lourd en ressource ?
@sff : Je pense que tu devrais mettre sur le forum la structure de ta table « rpg_news ». Comme je l'ai précisé précédemment, pourquoi veux tu supprimer des données ? Manque de place ? Je ne sais pas si c'est judicieux de la faire.

Il me vient deux petites idées (arf).
* Regarder si en supprimant les données antérieures à un temps précis ça ferait l'affaire.
* lorsque tu fais un ajout dans ta table, tu récupères l'id et tu exécutes de suite une autre requête basée sur cet identifiant récupéré (id - 6).
Nolem a écrit :Ah oui exact. Cela oblige à le faire en 2 requêtes.
En revanche les deux requêtes ne fonctionnent pô. Mysql n'accepte pas que la sous-requête soit basée sur la même table apparemment.
Nolem a écrit :Plus généralement toutes les requêtes de regroupements / d'ensembles.
MAX est lourd en ressource ?
Nolem a écrit :Tout ce dont il est question dans le premier post que j'ai indiqué !
Comme je l'ai précisé précédemment, pourquoi veux tu supprimer des données ? Manque de place ? Je ne sais pas si c'est judicieux de la faire.![]()
Il me vient deux petites idées (arf).
* Regarder si en supprimant les données antérieures à un temps précis ça ferait l'affaire.
* lorsque tu fais un ajout dans ta table, tu récupères l'id et tu exécutes de suite une autre requête basée sur cet identifiant récupéré (id - 6).

Modifié par Heyoan (13 Dec 2009 - 17:46)
Heyoan a écrit :
Cela oblige à le faire en 2 requêtes.
Exact, j'ai beau réfléchir, je ne vois pas d'autres moyens de le faire en une seul requête.
Heyoan a écrit :
Plus généralement toutes les requêtes de regroupements / d'ensembles.
Cela voudrait dire que COUNT, DISTINCT, GROUP BY, MIN, MAX, etc. sont plus lourd à gérer. Merci de cette précision. Dans la soirée, je parcourrai un peu mieux le lien de sqlpro.
Heyoan a écrit :
Tout ce dont il est question dans le premier post que j'ai indiqué !
Ha oui, oups

Modifié par Nolem (13 Dec 2009 - 19:21)
a écrit :
Mysql n'accepte pas que la sous-requête soit basée sur la même table apparemment.
Vous avez déjà essayé avec un truc de ce style ?
delete from table where id not in (select * from (
select id from table
order by id desc limit 6
));
Ca crée une table temporaire implicite. Niveau performance, c'est sûrement pire que max, mais max est techniquement incorrect, parce que ça ne peut marcher que si les id se suivent parfaitement.
Une autre solution possible serait de créer une table temporaire avec ce qu'on veut garder, ensuite on vire tout de la table principale, et on remet ce qu'on a mit dans la table temporaire dans la principale. Plus lourd tu meurs, mais au moins on est sûr que ça marche à tous les coups.