[RESOLU] PHP+SQL : Conserver uniquement le dernier enregistrement et virer les autres...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] PHP+SQL : Conserver uniquement le dernier enregistrement et virer les autres...

Re: PHP+SQL : Conserver uniquement le dernier enregistrement et virer les autres...

par yann18 » 19 mai 2015, 22:37

la requête suivante récupère le dernier nom

Code : Tout sélectionner

SELECT * FROM ( SELECT MAX(id) FROM ma_table WHERE nom='nom')
Maintenant pour supprimer tous les enregistrements sauf le dernier il suffit de spécifier l'opérateur NOT IN:
DELETE FROM ma_table WHERE id NOT IN ( SELECT * FROM ( SELECT  MAX(id)  FROM ma_table  WHERE nom='nom' ) AS sous_requete );

Re: PHP+SQL : Conserver uniquement le dernier enregistrement et virer les autres...

par LeVoL » 19 mai 2015, 11:20

Merci yann18 par contre tu n'as pas pris en considération le nom... en fait chaque nom envoit plusieurs fois des données et je souhaite conserver que le dernier enregistrement...

ta formule actuelle supprime tous les enregistrements des autres clients egalement ^^

sauf erreur de ma part :

DELETE FROM ma_table WHERE nom='nom' AND id NOT IN ( SELECT * FROM ( SELECT MAX(id) FROM ma_table WHERE nom='nom') AS sous_requete );

et Bonne journée à tous !

Re: PHP+SQL : Conserver uniquement le dernier enregistrement et virer les autres...

par yann18 » 18 mai 2015, 12:09

bonjour,
DELETE FROM ma_table WHERE id NOT IN ( SELECT * FROM ( SELECT  MAX(id)  FROM ma_table ) AS sous_requete );
Max(id) correspond certes au plus grand id mais ne correspond pas toujours au dernier id inséré.la fonction LAST_INSERT_ID() est à privilégier en lieu et place de MAX(ID) pour récupérer le dernier id insérer.

PHP+SQL : Conserver uniquement le dernier enregistrement et virer les autres...

par LeVoL » 18 mai 2015, 11:22

Bonjour à tous,

je suppose qu'on la pose souvent celle-ci mais (je la pose quand meme :lol: )

j'ai une table avec un id auto_increment, et un champs nom...

je souhaite conserver le dernier ID de ce nom :
exemple de mon cerveau : SELECT MAX(id) AS max_id FROM ma_table WHERE nom = 'mon_nom' (vous me dites si je me trompe hein ^^

par contre comment lui indiquer de supprimer tout sauf celui-ci (de manière optimisé) ?
exemple de ce qui reste du cervelet : DELETE FROM ma_table WHERE id != max_id && nom = 'mon_nom' ?

Et je suis une quiche en jointure (meme en ayant lu x fois les tutos ca rentre pas... :/) alors si vous avez ca en une ligne

Merci :)