IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Suppression de données d'une table en fonction des valeurs d'une autre table


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Suppression de données d'une table en fonction des valeurs d'une autre table
    Bonjour à tous,
    J'essaie sur mysql d'alléger la table énorme d'une base de données.
    Les enregistrements à effacer se comptent par plusieurs dizaines de milliers, et il serait trop long et fastidieux de les effacer avec phpmyadmin par interface graphique.
    Je précise que la table concerne un site en xoops, les tables sur lesquelles je veux travailler sont :
    xoops_priv_msgs et xoops_users
    La table dont je veux supprimer des enregistrements est la table xoops_priv_msgs, en fonction des valeurs trouvées dans la table xoops_users.
    J'arrive à sélectionner les champs correspondants grâce à cette commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT msg_id, msg_image, subject, 
      from_userid, to_userid, msg_time, msg_text, read_msg 
    FROM xoops_priv_msgs 
    LEFT JOIN xoops_users ON xoops_priv_msgs.to_userid=xoops_users.uid 
    WHERE from_userid=1 
      AND subject='[Mon site] Forums auto-notify : Nouvel envoi dans le forum' 
      AND last_login<=1229471387
    ou encore cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT msg_id, msg_image, subject, 
      from_userid, to_userid, msg_time, msg_text, read_msg 
    FROM xoops_priv_msgs, xoops_users 
    WHERE xoops_priv_msgs.to_userid=xoops_users.uid 
      AND from_userid=1 
      AND subject='[AquaSquale] Forums auto-notify : Nouvel envoi dans le forum' 
      AND last_login<=1229471387
    Je voudrais utiliser la syntaxe DELETE pour effacer les champs qui me sont retournés en remplaçant donc le SELECT par un DELETE, mais je m'interroge sur la syntaxe exacte à utiliser pour que ce soit bien les enregistrements concernés de la table xoops_priv_msgs qui soient effacés, et non des enregistrements de la table xoops_users (là ça serait carrément la merde ).

    J'avais pensé à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DELETE xoops_priv_msgs.msg_id xoops_priv_msgs.msg_image (ainsi de suite pr chaque champ) 
    FROM xoops_priv_msgs, xoops_users 
    WHERE xoops_priv_msgs.to_userid=xoops_users.uid 
      AND from_userid=1 
      AND subject='[MonSite] Forums auto-notify : Nouvel envoi dans le forum' 
      AND last_login<=1229471387
    Si quelqu'un pouvait me dépanner sur cette syntaxe ça serait cool, merci d'avance aux bonnes âmes

  2. #2
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Salut,

    Je pense que tu t'embrouilles un peu sur le delete. Tu n'as pas besoin d'effacer les données de chaque colonne... car DELETE effaces des lignes entières.

    Donc tu commences par affacer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM xoops_priv_msgs WHERE msg_id IN (
    et la tu cherches la liste de tes identifiants des lignes a supprimer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT msg_id FROM xoops_priv_msgs, xoops_users WHERE oops_priv_msgs.to_userid=xoops_users.uid AND from_userid=1 AND subject='[MonSite] Forums auto-notify : Nouvel envoi dans le forum' AND last_login<=1229471387

    Ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM xoops_priv_msgs WHERE msg_id IN (SELECT msg_id FROM xoops_priv_msgs, xoops_users WHERE oops_priv_msgs.to_userid=xoops_users.uid AND from_userid=1 AND subject='[MonSite] Forums auto-notify : Nouvel envoi dans le forum' AND last_login<=1229471387 )
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Alors en faisant ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM xoops_priv_msgs WHERE msg_id IN (SELECT msg_id FROM xoops_priv_msgs, xoops_users WHERE xoops_priv_msgs.to_userid=xoops_users.uid AND from_userid=1 AND subject='[MonSite] Forums auto-notify : Nouvel envoi dans le forum' AND last_login<=1229471387)
    J'obtiens ça :
    #1093 - You can't specify target table 'xoops_priv_msgs' for update in FROM clause
    Donc, j'ai enlevé le xoops_priv_msgs du 2eme FROM et ça marche nickel
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM xoops_priv_msgs WHERE msg_id IN (SELECT msg_id FROM xoops_users WHERE xoops_priv_msgs.to_userid=xoops_users.uid AND from_userid=1 AND subject='[AquaSquale] Forums auto-notify : Nouvel envoi dans le forum' AND last_login<=1229471387)
    Un grand merci pour ce dépannage

  4. #4
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Pas de souci.

    Pense à mettre résolu!
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/05/2015, 20h57
  2. [Débutant] Projet asp sur VisualStudio - Ajouter une condition en fonction des valeurs d'une colone
    Par yetman333 dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 01/04/2014, 10h05
  3. Réponses: 2
    Dernier message: 10/10/2013, 15h35
  4. Réponses: 2
    Dernier message: 17/03/2011, 21h45
  5. Réponses: 2
    Dernier message: 13/12/2007, 15h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo