Requete DELETE qui ne fonctionne pas

WRInaute impliqué
Bonjour,

J'ai une requete Delete, qui ne fonctionne pas. Ce que je trouve incompréhensible, c'est qu'elle me parrait totalement correct.

Dans phpmyadmin j'ai cette erreur : #1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

Voici le requête : DELETE FROM rpg_news WHERE id NOT IN (SELECT id FROM rpg_news WHERE type='2' ORDER BY id DESC LIMIT 0,6)
 
WRInaute impliqué
Le message semble plutôt clair...

#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

> Cette version de MySQL ne supporte pas encore les LIMIT & les sous requêtes (avec) IN/ALL/ANY/SOME
 
WRInaute impliqué
C'est la version la plus récente de phpmyadmin. C'est quand mémé sacrement étonnant qu'il supporte pas le LIMIT
 
WRInaute impliqué
C'est MySQL qui "pose" problème, pas phpMyAdmin.

De toute façon aucune version de MySQL stable (et peut être les autres en cours de développement) ne pourra exécuter cette requête. La sous-requête que tu utilises ne doit pas faire référence à la table sur laquelle tu veux supprimer des lignes.
 
WRInaute impliqué
Etant donné que la requête ne peut pas fonctionner, je vous expose ce que je voudrais faire :

Je voudrais garder les 6 ID les plus récent dans une table, et effacer tous les autres.

Merci à ceux qui pourront m'aider.
 
WRInaute impliqué
D'autant que les IN (SELECT .... FROM .... WHERE ....) sont énormément gourmands par rapport à un IN (valeur1, valeur2, valeur3, valeur4, valeur5)
 
WRInaute impliqué
le limit dans les sous-requete n'est pas supporté à ce jour. (d'après mes dernières recherches) ... à mon grand malheur aussi !
 
WRInaute impliqué
J'ai fais 2 requetes finalement. Une qui compte le nombre d'enregistrement. Et si il y a en a plus de 5, je supprime la plus ancienne. Je sais pas si il y avait possibilité de faire autrement.

Code:
			$nb_news = mysql_query(sprintf("SELECT COUNT(id) AS nb_news FROM %s_news WHERE type='%d'",
			$mysql->pref,
			mysql_real_escape_string($_POST['type'])));
			
			$nb_news = mysql_fetch_assoc($nb_news);
			
			if($nb_news['nb_news'] > 5){
				
				$delete = mysql_query(sprintf("DELETE FROM %s_news WHERE type='%d' ORDER by date ASC LIMIT 1",
				$mysql->pref,
				mysql_real_escape_string($_POST['type'])));
			}
 
Discussions similaires
Haut