effacer sujet dans une table mysql

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par bibiyanki, 7 Janvier 2013.

  1. bibiyanki
    bibiyanki WRInaute occasionnel
    Inscrit:
    4 Janvier 2010
    Messages:
    267
    J'aime reçus:
    0
    bonjour:

    en faite c'est un peu plus compliqué que mon titre

    j'aimerai effacer les sujets de mon forum qui se trouve dans les tables message et topics.

    je souhaiterai aussi qu'il efface uniquement les sujets des id =22 et 23..et surtout qu'il laisse les 20 plus récents sujets!


    ps: je vous demande ça car j'ai un script qui ajoute automatiquement des sujets tous les 15minutes et je veux pas que ma base sature!!

    merci beaucoup pour vos réponses :mrgreen:
     
  2. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 521
    J'aime reçus:
    51
    Del * from ... where ( id = 22 or id = 23)
     
  3. bibiyanki
    bibiyanki WRInaute occasionnel
    Inscrit:
    4 Janvier 2010
    Messages:
    267
    J'aime reçus:
    0
    merci c'est à peu près l'idée que j'avais..

    mais par contre pour ne laisser que les 20 plus récents messages?? as tu une idée marie-claude?
     
  4. jamalofski
    jamalofski WRInaute discret
    Inscrit:
    3 Mars 2007
    Messages:
    225
    J'aime reçus:
    0
    Si tes id sont dans l'ordre, je vois un truc genre :
    Code:
    delete from taTable where id  < (select max(id)-20 from taTable)
     
  5. ARcom
    ARcom Nouveau WRInaute
    Inscrit:
    30 Juillet 2012
    Messages:
    26
    J'aime reçus:
    0
    Salut,

    ou un truc du genre

    Code:
    DELETE FROM taTable WHERE id NOT IN (SELECT id FROM taTable ORDER BY id DESC LIMIT 0,20)
    (en admettant que ce soit l'id qui serve à déterminer les sujets les plus récents)

    C'est pas super optimisé (surtout dans le cas où il y aurait beaucoup d'enregistrements) mais ça réalise ce dont tu as besoin.

    Après le mieux c'est de faire en 2 requêtes

    1) SELECT id FROM taTable ORDER BY id DESC LIMIT 0,20
    => tu récupères l'id le plus petit

    2) DELETE FROM taTable WHERE id < (id le plus petit de la requête 1)
     
  6. jamalofski
    jamalofski WRInaute discret
    Inscrit:
    3 Mars 2007
    Messages:
    225
    J'aime reçus:
    0
    Oh put..., mais bien sûr! Pourquoi je n'y ai pas pensé? Il me faut un café et vite;)
     
  7. bibiyanki
    bibiyanki WRInaute occasionnel
    Inscrit:
    4 Janvier 2010
    Messages:
    267
    J'aime reçus:
    0
    hmm est ce bon

    Code:
    DELETE SELECT (forum_id= 23 or forum_id = 22) FROM topics WHERE id NOT IN (SELECT id FROM topics ORDER BY id DESC LIMIT 0,20)

    donc en gros, il va effacer tous les topics des forums avec l'id=23 et 22 (forum_id)et ne laisser seulement que les 20+ récents?
     
  8. bibiyanki
    bibiyanki WRInaute occasionnel
    Inscrit:
    4 Janvier 2010
    Messages:
    267
    J'aime reçus:
    0
  9. ARcom
    ARcom Nouveau WRInaute
    Inscrit:
    30 Juillet 2012
    Messages:
    26
    J'aime reçus:
    0
    C'est plutôt

    Si tu veux ne supprimer uniquement des sujets des forums 22 et 23 sauf les 20 derniers :

    Code:
    DELETE FROM topics WHERE id NOT IN (SELECT id FROM topics ORDER BY id DESC LIMIT 0,20) AND forum_id IN (22,23)
    Ou, si tu veux supprimer tous les sujets des forums 22 et 23 + tous les autre sujets sauf les 20 derniers

    Code:
    DELETE FROM topics WHERE id NOT IN (SELECT id FROM topics WHERE forum_id NOT IN (22,23) ORDER BY id DESC LIMIT 0,20) OR forum_id IN (22,23)
    Mais ce n'est pas très clair dans ta demande :

    A quoi correspondent ces tables ?

    le id c'est le id message ou le id topic ?
     
  10. bibiyanki
    bibiyanki WRInaute occasionnel
    Inscrit:
    4 Janvier 2010
    Messages:
    267
    J'aime reçus:
    0
    j'essaye de mieux réexpliquer

    j'ai un forum dans lequel je souhaite supprimer des messages de certains forums comme musculation avec forum_id=22 ou forum blabla forum_id=23 et j'aimerai juste garder les 20 plus récents messages dans ces forums (le reste des forums, je le fais manuellement!)

    donc pour ce faire j'ai 2 tables (topics, posts) dans topics j'ai uniquement les sujets et l'id du forum à laquel il est rattaché (forum_id)

    et dans post, j'ai le message avec l'id du topic (topic_id)

    je dois donc supprimer dans ces 2 tables si je veux que les messages soient totalement effacer (et pas que le titre ou le message)

    voila si tu veux d'autres précisions
    ma table topics et ses champs
    id poster subject posted last_post last_post_id last_poster num_views num_replies closed sticky moved_to forum_id question


    ma table posts et ses champs
    Textes complets id poster poster_id poster_ip poster_email message hide_smilies posted edited edited_by topic_id

    donc post[topic_id] = topics[id}

    merci beaucoup
     
  11. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 521
    J'aime reçus:
    51
    delete * from ... where ( forum_id = 22 or forum_id = 23 ) order by date_du_post DESC LIMIT 20,999999999999999999999

    ou
    delete * from ... where ( forum_id = 22 or forum_id = 23 ) order by 'date_du_post' OFFSET 20
     
  12. bibiyanki
    bibiyanki WRInaute occasionnel
    Inscrit:
    4 Janvier 2010
    Messages:
    267
    J'aime reçus:
    0
    c'est pas bien ça

    DELETE FROM topics WHERE id NOT IN (SELECT id FROM topics ORDER BY id DESC LIMIT 0,20) AND forum_id IN (22,23)

    ?
     
  13. bibiyanki
    bibiyanki WRInaute occasionnel
    Inscrit:
    4 Janvier 2010
    Messages:
    267
    J'aime reçus:
    0
  14. bibiyanki
    bibiyanki WRInaute occasionnel
    Inscrit:
    4 Janvier 2010
    Messages:
    267
    J'aime reçus:
    0
  15. ARcom
    ARcom Nouveau WRInaute
    Inscrit:
    30 Juillet 2012
    Messages:
    26
    J'aime reçus:
    0
    Bonjour

    Essaye-ça peut-être :

    Code:
    DELETE topics, posts
    FROM topics, posts
    WHERE topics.id = posts.topic_id
    AND topics.forum_id IN (22,23)
    AND topics.id NOT IN (SELECT id FROM topics WHERE forum_id IN (22,23) ORDER BY posted DESC LIMIT 0,20) 
    Le problème de la requête DELETE sur plusieurs tables en même temps (avec des jointures) c'est que l'on ne peut pas, a priori, utiliser les clauses ORDER BY et LIMIT et donc qu'on est obligé de passer par une sous-requête.

    La doc MySQL à ce sujet : http://dev.mysql.com/doc/refman/5.0/fr/delete.html
     
  16. bibiyanki
    bibiyanki WRInaute occasionnel
    Inscrit:
    4 Janvier 2010
    Messages:
    267
    J'aime reçus:
    0
    j'essaye de le faire dans phpadmin mais j'ai cette erreur

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

    sinon il faut le faire dans topics seulement et update messages

    merci beaucoup
     
Chargement...
Similar Threads - effacer sujet table Forum Date
GA permet-il d'effacer _ga, _gid et _gat ? Google Analytics 28 Octobre 2021
Letsencrypt renew plusieurs ndd et effacer un ndd ? Administration d'un site Web 8 Juillet 2021
Liens risqués - Les effacer est prendre davantage de risques ? Netlinking, backlinks, liens et redirections 7 Juillet 2016
Effacer des pages anciennes et des pages de bonnes "qualités" Problèmes de référencement spécifiques à vos sites 18 Mai 2016
Comment effacer des pages piratées indexées ? Débuter en référencement 14 Décembre 2014
Effacer le cache Développement d'un site Web ou d'une appli mobile 29 Août 2012
Comment effacer l'historique sur les moteurs de recherche ? Annuaires et moteurs 20 Juillet 2012
Comment effacer JavaScript de Google Analytics sous prestashop? Google Analytics 5 Février 2012
effacer les archives du who.is Développement d'un site Web ou d'une appli mobile 3 Août 2011
Nouvel algo Google (nov. 2020) : sous-sujets (subtopics) Référencement Google 11 Janvier 2021