Mysql: Effacer tout ce qui est au-dessus d'une limite

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par seabird, 7 Août 2008.

  1. seabird
    seabird WRInaute occasionnel
    Inscrit:
    1 Décembre 2003
    Messages:
    318
    J'aime reçus:
    0
    Bonjour,

    Je cherche par exemple a effacer tout ce qui est au-dessus de 20 enregistrements triés par ordre décroissant, sachant que les id ne se suivent pas obligatoirement. Donc je ne peux pas faire:
    Code:
    $query ="DELETE FROM $table WHERE id>20 ORDER BY nombre DESC";
    $result = mysql_query($query); 

    J'ai pensé faire 2 requètes:
    Une pour connaitre le nombre de ligne et une pour effacer.

    Code:
    $query1="select * from $table ORDER BY nombre DESC";	   
    $result1 = mysql_query($query1);
    $nombre_lignes=mysql_num_rows($result1);
    	
    $query2 ="DELETE FROM $table ORDER BY nombre DESC LIMIT 20,$nombre_ligne";
    $result2 = mysql_query($query2); 		
    
    Mais il semble apparemment que Delete ne supporte pas un Limit à 2 arguments.

    J'ai essayé tout simplement d'écrire pour voir:
    Code:
    $query ="DELETE FROM $table  LIMIT 2";
    $result = mysql_query($query); 
    qui fonctionne correctement

    par contre :
    Code:
    $query ="DELETE FROM $table  LIMIT 1,2";
    $result = mysql_query($query); 
    ne fonctionne pas.

    Si vous avez une idée je suis preneur :)
     
  2. arnaudmn
    arnaudmn WRInaute passionné
    Inscrit:
    11 Mai 2005
    Messages:
    1 038
    J'aime reçus:
    2
    Comme ça :
    DELETE FROM $table WHERE id not in (SELECT id FROM $table ORDER BY nombre LIMIT 0,20)
     
  3. seabird
    seabird WRInaute occasionnel
    Inscrit:
    1 Décembre 2003
    Messages:
    318
    J'aime reçus:
    0
    Ok merci , je n'ai pas pensé à imbriquer.
    Mais cela ne marche pas. Je n'ai pas d'erreur, mais rien n'est effacé :( et à priori je ne vois pas pourquoi ..
     
  4. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 226
    J'aime reçus:
    0
    Si c'est seulement 20lignes que tu veux sauvegarder, exporte ta table avec ses données puis efface tout. Ensuite une simple requête insert avec les 20lignes ;)

    Et puis si tu fais order by nombre DESC, il y a surement moyen de faire

    DELETE FROM $table WHERE nombre < x ?
     
  5. seabird
    seabird WRInaute occasionnel
    Inscrit:
    1 Décembre 2003
    Messages:
    318
    J'aime reçus:
    0
    A oui tiens pourquoi pas, c'est un peu laborieux mais c'est une bonne idée.

    En fait pour éclaircir un peu les choses.
    Je veux déterminer les mots cles les plus tapés tout en ne conservant que les 20 mots cles les plus importants. Donc si je n'efface pas apres les 20 premiers , ma base n'arrêtera pas de grossir.
     
  6. arnaudmn
    arnaudmn WRInaute passionné
    Inscrit:
    11 Mai 2005
    Messages:
    1 038
    J'aime reçus:
    2
    C'est vrai que le limit ne fonctionne que moyennement en sous-requete (et encore, ça dépend des versions de mysql).
    Autre solution, une table temporaire :

    Code:
    CREATE TEMPORARY TABLE tmptable
    SELECT id FROM $table
    order by nombre
    limit 0,20;
    
    DELETE $table FROM $table
    INNER JOIN tmptable
    ON $table.id = tmptable.id;
     
  7. seabird
    seabird WRInaute occasionnel
    Inscrit:
    1 Décembre 2003
    Messages:
    318
    J'aime reçus:
    0
    Bon ce que j'ai fait pour finir:
    Je veux etre sur par exemple de garder 2000 enregistrements.
    Code:
    select * from $table ORDER BY nombre DESC LIMIT 0,2000
    J'efface la table:
    Code:
    TRUNCATE TABLE $table 
    et je réécris:
    Code:
    INSERT INTO $table (mots_cles,nombre) VALUES ('$mots_cles','$nombre') 
    et après je ne sélectionne que les 20 plus importants.
    Code:
    select * from $table ORDER BY nombre DESC LIMIT 0,20
    Ca me parait un peu lourd , mais bon ça marche.
     
  8. julienr
    julienr WRInaute impliqué
    Inscrit:
    5 Août 2003
    Messages:
    939
    J'aime reçus:
    2
    nan c pas possible d'utiliser limit dans une sous requete mais par contre cela peux se contourner ansi :)

    Code:
    SET @a :=0;
    
    DELETE FROM $table WHERE $id NOT IN
    (
    SELECT $id, @a := @a +1
    FROM $table
    WHERE @a <20
    ORDER BY $order
    )
    
     
Chargement...
Similar Threads - Mysql Effacer limite Forum Date
effacer sujet dans une table mysql Développement d'un site Web ou d'une appli mobile 7 Janvier 2013
effacer es doublons d'une table mysql [script] Développement d'un site Web ou d'une appli mobile 21 Août 2007
[MySQL] Comment effacer simplement la dernière entrée ? Développement d'un site Web ou d'une appli mobile 30 Octobre 2005
Mysql : Impact convertion champ numérique SMALLINT vers BIGINT Développement d'un site Web ou d'une appli mobile 23 Août 2021
Quel SGBDR autre que MySQL/MariaDB ? Administration d'un site Web 12 Janvier 2021
encodage texte sur requete mysql Demandes d'avis et de conseils sur vos sites 21 Octobre 2020
Requête MySql imbriquée Développement d'un site Web ou d'une appli mobile 8 Octobre 2020
Supprimer les doublons d'une table mysql Développement d'un site Web ou d'une appli mobile 16 Juin 2020
Mysql migration utf8->utf8mb4 Développement d'un site Web ou d'une appli mobile 17 Août 2019
recherche lettres dans mysql Développement d'un site Web ou d'une appli mobile 11 Juillet 2019
cache mysql maison Développement d'un site Web ou d'une appli mobile 18 Février 2019
Stocker dans des variables php les fonctions MySql Développement d'un site Web ou d'une appli mobile 2 Février 2019
message : [LEGACY][libmysqlclient] Please consider moving to stable and mysqlnd in Administration d'un site Web 8 Novembre 2018
Connexion à un serveur mysql distant Développement d'un site Web ou d'une appli mobile 21 Octobre 2018
Mysql, modifier des chaines avec différents caractères Administration d'un site Web 13 Septembre 2018
Fusionner deux champs sur la même table et même base de donnée Mysql Administration d'un site Web 12 Septembre 2018
Requête Mysql avec des string Développement d'un site Web ou d'une appli mobile 6 Février 2018
Surveiller les connexions à la base de données MySQL Développement d'un site Web ou d'une appli mobile 1 Février 2018
PHP : script pour mettre catalogue xml clickbank dans mysql Développement d'un site Web ou d'une appli mobile 6 Décembre 2017
Mise à jour MySql 5.1 vers 5.5 Administration d'un site Web 1 Juillet 2017