Requete pour garder un nombre précis de champs en supprimant les indésirables

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par KOogar, 7 Juillet 2010.

  1. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    81
    Bonjour,

    je dois grouper des flux et j'ai besoin de purger la table de flux regulieremen, je n'ai encore rien codé, je souhaiterai avoir la requete avant de commencer le coding

    le probleme: j'ai une table a 4 champs (id,nom,categorie,date) ou il faut supprimer des champs dans chaque categorie pour ne garder que les 10 derniers champs rentrés par categorie.
    j'ai pensé a une requete de ce genre, est ce ok ??

    DELETE FROM tb WHERE (SELECT * FROM tb GROUP BY cat LIMIT 100,11)
     
  2. erestrebian
    erestrebian WRInaute occasionnel
    Inscrit:
    15 Juin 2007
    Messages:
    411
    J'aime reçus:
    0
    ça me semble correct mais le mieux est encore d'essayer sur la table en question...
     
  3. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 226
    J'aime reçus:
    0
    A bon moi elle me semble un peu bidon la requête, t'es sur qu'elle s'exécute ?
    Moi je ferais un pti script en tache cron qui fait ceci:

    Un petit select des catégories
    Pour chaque catégorie on execute ceci:
    DELETE FROM tb where categorie = $CURRENTCATEGORIE order by id desc limit 10,18446744073709551615
     
  4. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    81
    j'ai envie de m'épargner les phases tests, parceque j'ai beaucoup de mal a coder en ce moment(mes ordi son dans un conteneur car je déménage) et j'ai besoin de temps.
    la requete je preferai la baser sur les dates et surtout pas sur les id car la table va vite devenir un gruyere a ajouter et supprimer sans arret. Donc tu me conseil de faire une boucle sur les categorie et de supprimer a chaque passage, ca me semble bien vu que je n'ai que 5-6 categories

    DELETE FROM tb
    WHERE categorie = $CURRENTCATEGORIE
    ORDER BY date DESC
    LIMIT 10,100;

    voila, je reste sur cette requete basique avec une boucle, la meme sans boucle je suis preneur :)
     
  5. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 226
    J'aime reçus:
    0
    Vu que les id ne font que augmenter (autoincrement) tu peux te baser dessus non ?
    En une seule requête je crois pas que ce soit possible. Sinon les procédures stockées et compagnie ont été inventées pour rien :p
     
  6. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    81
    oui tu as raison avec 1 autoincrement c'est faisable., mais au final je vais zaper l'id vu qu'il faut les 10 derniers enregistrements par date et les flux eux meme ne seront pas indexé, seul les pages categories vont l'etre

    pour la limite j'aurais plutot commencé a supprimer a partir de 11 vu quil faut garder les 10 premiers ?
     
  7. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 226
    J'aime reçus:
    0
    Ca commence à zero.
     
  8. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 274
    J'aime reçus:
    0
    la requête de base (celle que tu as marquée au début) ne pourra pas s'exécuter car tu n'as as indiqué de champ.
    il faudrait, au moins un :
    DELETE FROM tb WHERE id in (SELECT id FROM tb "là tu mets ton filtrage")
     
  9. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    81
    o j'avais pas vu ton post Leonick, j'aurais net préférer avoir 1 seule requete

    je viens de le faire et c'est loin de passer en 1 requete, 2 petite au depart puis autant de requetes que d'id a supprimer/// le script est deja en tache cron donc j'y reviendrais pas dessus, j'en profite pour signaler un flux nouveau de news php et c'est pour cleaner ce flux que j'avais besoin de la dite requete (--http://www.phpsources.org/actualites-php.htm)

    le code pour cleaner

    Code:
    <?php
      $nbre_element = 11;
    
      $q = mysql_query('SELECT cat FROM `actualite_datas_flux` GROUP BY cat');
           while ($r1 = mysql_fetch_array($q)) {
                  $cat_actualites[] = $r1;
           }
    
      $q = mysql_query('SELECT id, cat FROM `actualite_datas_flux` ORDER BY date DESC');
           while ($r2 = mysql_fetch_array($q)) {
                  $datas_actualites[] = $r2;
           }
    
      foreach($cat_actualites as $cat_actualites_r) {
        $compteur = 0;
        foreach($datas_actualites as $datas_actualites_r) {
        if ($cat_actualites_r['cat'] == $datas_actualites_r['cat']  ) {
        $compteur++;
        if ( $compteur >= $nbre_element )
             mysql_query('DELETE
                          FROM `actualite_datas_flux`
                          WHERE id = '.$datas_actualites_r['id'].'');
        }
       }
      }
      ?>
     
  10. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 226
    J'aime reçus:
    0
    C'était faisable en seulement 2 requêtes. Tu sélectionnes les catégories puis tu supprimes tout ce qui ne correspond pas aux 10 plus récentes dans chaque catégorie !
     
  11. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    81
    ouai on avait parler de faire 1 table et de boucler dessus, moi j'en ai fait 2, de toute facon ca faisant autant de requete que de categories existantes a verifier donc beaucoup plus que 2 requetes en tout cas. J'ai fais 2 tables car j'en ai profiter pour faire d'autres opérations, j'ai simplement mis le code brut. Merci pour ton aide ++
     
Chargement...
Similar Threads - Requete garder nombre Forum Date
Erreur dans ma requête DMCA Droit du web (juridique, fiscalité...) 18 Novembre 2021
Réunir 2 requetes sql (ORDER BY ASC et DESC) Développement d'un site Web ou d'une appli mobile 29 Août 2021
Problème de ranking sur une requête cible Demandes d'avis et de conseils sur vos sites 24 Août 2021
Page d’accueil + sous page sur la même requête Problèmes de référencement spécifiques à vos sites 14 Juillet 2021
Search Console Absence de requêtes dans la search console Problèmes de référencement spécifiques à vos sites 21 Mai 2021
Nettoyage de requètes externes de Google, comment faire? Administration d'un site Web 24 Octobre 2020
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
Comment se placer sur des requêtes inhabituelles dû au confinement Rédaction web et référencement 25 Mars 2020
Requête Ajax avec code source visible Développement d'un site Web ou d'une appli mobile 14 Mars 2020
Déclassement sur requêtes et pays spécifiques? Crawl et indexation Google, sitemaps 11 Janvier 2020
Résultats étranges pour la requête site: Problèmes de référencement spécifiques à vos sites 26 Août 2019
Qwant 20 milliards de requetes en 2018? 2 x plus que Google? Autres moteurs de recherche connus 2 Avril 2019
[Cas d'école] Requête clé instable depuis plus de 8 ans Référencement Google 11 Mars 2019
Résultat de recherche google sans méta-description en fonction de la requête Problèmes de référencement spécifiques à vos sites 8 Février 2019
marqueurs nommés vs marqueurs interrogatifs requête préparée Développement d'un site Web ou d'une appli mobile 16 Janvier 2019
Marqueur nommé ou interrogatif pour les requetes préparées ? Développement d'un site Web ou d'une appli mobile 30 Décembre 2018
Prestashop - Comportement bizarre d'une requête SQL e-commerce 1 Décembre 2018
Requêtes Google search control et mots-clés de mon site Débuter en référencement 26 Novembre 2018
Monter sur la requete reprogrammation ethanol bordeaux Demandes d'avis et de conseils sur vos sites 26 Novembre 2018