Supprimer entrées supérieures à 6

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 : Supprimer entrées supérieures à 6

Re: Supprimer entrées supérieures à 6

par moogli » 07 oct. 2016, 13:35

ça marche pas c'est pas un diagnostique ;)

la fonctionnalité est la c'est le principal. bien que je pense que cela est possible en une seule requête c'est étonnant que cela ne fonctionne pas :/

@+

Re: Supprimer entrées supérieures à 6

par cris84 » 07 oct. 2016, 11:34

Bonjour,

ça ne marche pas alors j'ai adapté comme ceci :
$supprimer = mysqli_query($bdd, "SELECT vu.id FROM detail, vu, membre WHERE detail.id=vu.id_serie and vu.id_membre=membre.id and membre.id=".$_SESSION['id']."  ORDER BY vu.id DESC LIMIT 6,1") or die(mysqli_error($bdd));

		$msg = mysqli_fetch_array($supprimer);
		$id_msg = $msg['id'];
		
		if ($id_msg != NULL)
		{
			mysqli_query($bdd, 'DELETE FROM vu WHERE id<='.$id_msg) or die(mysqli_error($bdd));
		}
Là ça fonctionne, vous en pensez quoi ?

Re: Supprimer entrées supérieures à 6

par moogli » 07 oct. 2016, 08:45

ha wé c'est con ça :)

du coup il faut faire autrement :)
il existe la fonction row_number(), bien que je ne l'ai pas retrouvée dans la doc (en fait j'ai l'impression que l'on trouve rien la dedans ...)

un truc dans le genre peux être
DELETE
FROM vu
WHERE id_serie NOT IN (
	SELECT t.id_serie
	FROM (
		SELECT vu.id_serie,row_number() over(PARTITION BY vu.id ORDER BY vu.id) rn
		FROM detail, vu, membre
		WHERE detail.id=vu.id_serie AND vu.id_membre=membre.id AND membre.id=$_SESSION['id']
		ORDER BY vu.id) t
	WHERE t.rn <=6
)
sinon demande à google ! mysql dense_rank le premier fournit une solution.

@+

Re: Supprimer entrées supérieures à 6

par cris84 » 06 oct. 2016, 21:06

Bonsoir et merci de la réponse.

J'ai une erreur : This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

voici ma requête sql :
mysqli_query($bdd, "DELETE from vu WHERE id_serie not in (SELECT * FROM detail, vu, membre WHERE detail.id=vu.id_serie and vu.id_membre=membre.id and membre.id=".$_SESSION['id']."  ORDER BY vu.id DESC LIMIT 6)")or die(mysqli_error($bdd));
Merci d'avance

Re: Supprimer entrées supérieures à 6

par moogli » 06 oct. 2016, 11:53

salut,

il faut ruser un peu
delete from latable where id not in (select id from latable where le predicat order by colonnequivabien limit 6)
en gros supprimer les lignes dont l'id n'est pas ceux que tu récupères et qui correspondent aux 6 derniers.
A toi d'adapter avec ta table et tes prédicats.

@+

Supprimer entrées supérieures à 6

par cris84 » 05 oct. 2016, 16:49

Bonjour à tous,
une question sans doute toute idiote, mais je ne trouve rien sur les forums :

je voudrais supprimer toutes les entrées d'une table qui sont supérieures à 6.

J'enregistre les données jusqu'à 6 en ensuite je veux supprimer les suivantes.

J'utilise mysqli avec ORBER BY pour garder les 6 dernières enregistrées et LIMIT pour supprimer le reste (après les 6 premières).

comment faire avec LIMIT ?

Merci d'avance