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 :

[MySQL] Suppression d'une liste d'éléments


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 129
    Points : 63
    Points
    63
    Par défaut [MySQL] Suppression d'une liste d'éléments
    Bonjour,


    voici le schéma de ma table ETUDIANT

    etu_numero
    etu_nom
    etu_prenom

    J'ai une liste de "etu_numero" sous la forme suivante dans un fichier texte.
    Et je voudrai les supprimer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FMPOS9999027049-FMPOS9999026721-FMPOS9999026734-FMPOS9999026760-FMPOS9999026943-FMPOS9999026854-FMPOS9999026779-FMPOS9999026974-FMPOS9999026744-FMPOS9999026720-FMPOS9999027006-FMPOS9999027056-FMPOS9999026863-FMPOS9999026880-FMPOS9999026822-FMPOS9999026788-FMPOS9999026969-FMPOS9999026999-FMPOS9999026980-FMPOS9999026860-FMPOS9999026818-FMPOS9999026856-FMPOS9999026949-FMPOS9999026730
    Merci pour votre aide.

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Salut,

    Quel est ton SGBD STP ?

    SI ton SGBD support INSTR (comme Oracle), tu peux faire qqchose du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM Etudiant
     WHERE INSTR(etu_numero, 'FMPOS9999027049-FMPOS9999026721-...') >0
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 129
    Points : 63
    Points
    63
    Par défaut
    MySQL, et ca ne marche pas avec ta requête..

  4. #4
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 757
    Points : 2 992
    Points
    2 992
    Par défaut
    Qu'est-ce qui ne fonctionne pas ? ==> quel est le message d'erreur retourné ?

    Le code que tu as fournis est-ce la valeur du champs ou une partie de celui-ci ?

    Quelques possibilités; à toi de voir celle qui fonctionne. Note que tu devrais certainement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DELETE FROM Etudiant
     WHERE etu_numero LIKE '%FMPOS9999027049-FMPOS9999026721-FMPOS9999026734-FMPOS9999026760-FMPOS9999026943-FMPOS9999026854-FMPOS9999026779-FMPOS9999026974-FMPOS9999026744-FMPOS9999026720-FMPOS9999027006-FMPOS9999027056-FMPOS9999026863-FMPOS9999026880-FMPOS9999026822-FMPOS9999026788-FMPOS9999026969-FMPOS9999026999-FMPOS9999026980-FMPOS9999026860-FMPOS9999026818-FMPOS9999026856-FMPOS9999026949-FMPOS9999026730%') 
     
    DELETE FROM Etudiant
     WHERE etu_numero='FMPOS9999027049-FMPOS9999026721-FMPOS9999026734-FMPOS9999026760-FMPOS9999026943-FMPOS9999026854-FMPOS9999026779-FMPOS9999026974-FMPOS9999026744-FMPOS9999026720-FMPOS9999027006-FMPOS9999027056-FMPOS9999026863-FMPOS9999026880-FMPOS9999026822-FMPOS9999026788-FMPOS9999026969-FMPOS9999026999-FMPOS9999026980-FMPOS9999026860-FMPOS9999026818-FMPOS9999026856-FMPOS9999026949-FMPOS9999026730')
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  5. #5
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 129
    Points : 63
    Points
    63
    Par défaut
    beh en fait

    j ai une liste de etu_numero
    FMPOS9999027018
    FMPOS9999026931
    FMPOS9999026870
    FMPOS9999027000
    FMPOS9999027010
    FMPOS9999026992
    FMPOS9999026898
    FMPOS9999026812
    FMPOS9999026776
    FMPOS9999026923
    ...

    et je voudrai supprimer toutes les lignes de la table ou le etu_numero est egal a un elemen de la liste

    désolé je n ai pas été très clair

  6. #6
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    C'est dommage que ce soit du TXT. Ce qui aurais pu être plus simple et d'importer un fichier XML directement dans une table ou temporaire ou en dur avec LOAD_FILE() ou au travers d'une procédure stockée !

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Un petit programme PHP ferait l'affaire.
    L'algorithme :
    1) Lire le fichier texte
    2) 'exploder' chaque ligne dans un tableau qui contiendra donc tous les numéros à éliminer
    3) se connecter à la BDD
    4) pour chaque élément du tableau
    a) construire la requête de suppression
    b) exécuter la requête
    5) fin pour
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 757
    Points : 2 992
    Points
    2 992
    Par défaut
    Autre solution : importer le fichier TXT dans une table et puis faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM Etudiant WHERE etu_numero IN (SELECT etu_numero FROM BadNumber)
    Je présume donc que tu as importé dans la table BadNumber le fichier TXT. L'importation peut se faire avec un BULK COPY voire un package SSIS.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    En fait, l'ordre des arguments de INSTR est inversé dans la requête de Xo... ça donne donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM Etudiant
     WHERE INSTR('FMPOS9999027049-FMPOS9999026721-......', etu_numero) >0

  10. #10
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par parasol007 Voir le message
    MySQL, et ca ne marche pas avec ta requête..
    Alors il faut chercher l'équivalent de INSTR en MySQL, ça doit être la fonction POSITION ...

    Mais ma solution ne marche que si tu as une chaîne dans lequel tu as concaténé tous tes n°, comme dans ton premier post. Si tu stockes tes n° à supprimer dans un fichier texte, c'est clair que le SQL seul ne va pas répondre à ta problématique, cf les propositions que l'on t'a fait ci-dessus.
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  11. #11
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Salut Xo !

    C'est bien POSITION (ou son synonyme LOCATE). Ta requête devient donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DELETE FROM Etudiant
     WHERE POSITION(etu_numero IN 'FMPOS9999027049-FMPOS9999026721-...') >0
    EDIT : en fait, INSTR existe bien dans MySQL , la requête de Snipah devrait donc marcher parfaitement.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

Discussions similaires

  1. [VB]Ja'imerais afficher une liste d'éléments...
    Par STRUFIELD dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/01/2006, 18h49
  2. a jour ou suppression a une liste deroulante
    Par kouame berenger aymar dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 03/12/2005, 08h06
  3. [Regex][Avis] Méthode de suppression d'une liste de mots
    Par manal dans le forum Collection et Stream
    Réponses: 22
    Dernier message: 15/10/2005, 00h39
  4. [struts] afficher page par page une liste d'élément
    Par BurningPat dans le forum Struts 1
    Réponses: 6
    Dernier message: 27/09/2005, 11h09
  5. [LG]suppression dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 9
    Dernier message: 16/12/2003, 21h20

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