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 :

Ne conserver que les X derniers enregistrements de l'"historique", supprimer le reste ?


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 163
    Points : 59
    Points
    59
    Par défaut Ne conserver que les X derniers enregistrements de l'"historique", supprimer le reste ?
    Bonjour,

    Dans une table nommée "commentaires", j'ai les colonnes : "id" (unsigned int, primaire), "id_personne" (int), "commentaire" (text) et "timestamp" (timestamp, update on current).

    J'aimerais une requète qui va supprimer toutes les lignes qui ont un 3 dans la colonne id_personne À L'EXCEPTION des 10 plus récents (classés par timestamp). Comme si je voulais conserver les 10 derniers dans l'historique pour cette personne, donc...

    J'ai cherché avec LIMIT sans trouver ce qu'il me faut... Je sens que c'est débile mais je ne parviens pas à trouver comment faire... :-s

    Merci pour votre aide !

    T.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bulgarie

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 30
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Alors l'idéal serait de pouvoir faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM test WHERE id NOT IN (SELECT id FROM test ORDER BY id DESC LIMIT 10)
    Mais malheureusement MySQL ne le permet pas et te retourne une erreur #1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'.


    Deux solutions s'ouvrent à toi:

    - Soit tu utilises plusieurs requêtes (une première qui va lister les 10 éléments que tu veux garder, puis une seconde pour supprimer le reste):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT id FROM table WHERE ... LIMIT 10;
    DELETE FROM table WHERE id NOT IN (xx, xx, xx, xx, xx)
    Mais il te faudra coder ça par exemple en PHP.


    - Soit tu triches un peu pour que MySQL accepte la première requête que je t'ai montrée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM test WHERE id NOT IN (SELECT * FROM (SELECT id FROM `test` ORDER BY id DESC LIMIT 10) temp)
    Normalement, ça fonctionne

    J'espère que ça t'aidera!

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 163
    Points : 59
    Points
    59
    Par défaut
    La dernière solution entièrement en MySQL me plaît mieux. Et ca marche sans souci ! :-) Bref, c'est super, je suis content ! Mille mercis !!!
    T.

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

Discussions similaires

  1. Ne faire un dump que sur les X derniers enregistrements
    Par FredAWT dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/10/2015, 13h24
  2. Réponses: 8
    Dernier message: 26/08/2010, 17h12
  3. Ne conserver que les derniers enregistrements modifiés
    Par ALOUBALOU dans le forum Langage SQL
    Réponses: 6
    Dernier message: 10/09/2008, 22h15
  4. Réponses: 5
    Dernier message: 25/01/2008, 20h26
  5. Ne conserver que les N enregistrement les plus récents.
    Par gomodo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/01/2008, 19h46

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