[SQL] Garder les 10 derniers tuple par id_usr
JackBower
-
JackBower -
JackBower -
Bonjour,
Je souhaiterai construire une requête SQL unique qui permet de garder uniquement les 10 derniers réusultats par id_user. Je m'explique :
J'ai une table MESSAGE dont voici la structure :
- id : int (auto-increment)
- id_user : int -> utilisateur qui a posté le message
- texte : txt -> text du message... (ou autre champs qui importe peu, au final)
Je souhaiterai qu'à l'exécution d'une unique requête SQL, la table comporte uniquement les 10 derniers message de chaque user.
NB : Je suis sur MySQL (je pense que la version importe peu)
Par exemple cette requete fait exactement ce que je souhaite, mais pour un seul utilisateur:
Pouvez-vous m'aider à me sortir de cette mélasse, s'il vous plait :) ?
Je souhaiterai construire une requête SQL unique qui permet de garder uniquement les 10 derniers réusultats par id_user. Je m'explique :
J'ai une table MESSAGE dont voici la structure :
- id : int (auto-increment)
- id_user : int -> utilisateur qui a posté le message
- texte : txt -> text du message... (ou autre champs qui importe peu, au final)
Je souhaiterai qu'à l'exécution d'une unique requête SQL, la table comporte uniquement les 10 derniers message de chaque user.
NB : Je suis sur MySQL (je pense que la version importe peu)
Par exemple cette requete fait exactement ce que je souhaite, mais pour un seul utilisateur:
DELETE FROM MESSAGE WHERE id_user = "1" limit 10, 6456542
Pouvez-vous m'aider à me sortir de cette mélasse, s'il vous plait :) ?
A voir également:
- [SQL] Garder les 10 derniers tuple par id_usr
- Clé d'activation windows 10 - Guide
- Restauration systeme windows 10 - Guide
- Windows 10 ne démarre plus - Guide
- Windows 10 gratuit - Accueil - Mise à jour
- Logiciel montage vidéo gratuit windows 10 - Guide
8 réponses
tu veux supprimer les 10 derniers messages?
DELETE FROM MESSAGE WHERE id IN (SELECT count(id) FROM MESSAGE ) limit 10, 6456542;
Je pense à ça, à tester
DELETE FROM MESSAGE WHERE id IN (SELECT count(id) FROM MESSAGE ) limit 10, 6456542;
Je pense à ça, à tester
Non, je souhaite garder, pour chaque id_user distinct les 10 derniers messages (qui on l'id le plus élevé)
c'est à dire avoir les données tels que
Ainsi, le user 1 a ses 10 derniers messages
Ainsi, le user 2 a ses 7 derniers messages (car il en a écrit que 7)
Ainsi, le user 3 a ses 10 derniers messages
Voyez-vous ?
c'est à dire avoir les données tels que
id id_user message 867 1 bla 868 1 bla 869 1 bla 870 1 bla 871 1 bla 872 1 bla 873 1 bla 874 1 bla 875 1 bla 876 1 bla 877 1 bla 878 2 bla 879 2 bla 880 2 bla 881 2 bla 882 2 bla 883 2 bla 884 2 bla 885 3 bla 886 3 bla 887 3 bla 888 3 bla 889 3 bla 890 3 bla 891 3 bla 892 3 bla 893 3 bla 894 3 bla 895 3 bla
Ainsi, le user 1 a ses 10 derniers messages
Ainsi, le user 2 a ses 7 derniers messages (car il en a écrit que 7)
Ainsi, le user 3 a ses 10 derniers messages
Voyez-vous ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai des idées genre ca :
Mais je pense pas que ca convienne a ta table =s
Il faudrait une date par exemple pour connaitre les derniers messages
<?php require_once('sqlconnect.php'); $query = 'SELECT id FROM xxxx ORDER BY id DESC LIMIT 0,10'; $query_result = mysql_query($query); //Récupération des id du 10 eme a ... derniers enregistrements while($row = mysql_fetch_array($query_result)): $id_array[] = $row['id']; endwhile; //Suppression pour chaque id récupéré auparavant foreach($id_array as $key=>$value): mysql_query('DELETE FROM xxxx WHERE id = '.$value.' LIMIT 1'); endforeach; ?>
Mais je pense pas que ca convienne a ta table =s
Il faudrait une date par exemple pour connaitre les derniers messages
Je ne pense pas que cette solution me convienne... cela revient à faire:
Non, ce que je cherche à faire est, comme tu l'a dit :
En gros supprimer tous les messages sauf les 10 derniers de chaque utilisateur.
En php, j'aurai pu faire (en simplifiant):
Mais je voudrais le faire en UNE requête SQL.
DELETE FROM MESSAGE ORDER BY id LIMIT 10, 456464
Non, ce que je cherche à faire est, comme tu l'a dit :
En gros supprimer tous les messages sauf les 10 derniers de chaque utilisateur.
En php, j'aurai pu faire (en simplifiant):
foreach($users as $user) mysql_query("DELETE FROM MESSAGE WHERE id_user = ".$user->get_id()". ORDER BY id LIMIT 10, 456464)");
Mais je voudrais le faire en UNE requête SQL.