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 :

Problème requête MySQL


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 40
    Points : 12
    Points
    12
    Par défaut Problème requête MySQL
    Bonjour,
    J’ai une base de données de candidats qui possèdent chacun
    ID_CANDIDAT
    LOGIN_CANDIDAT
    DATE_CREATION
    (et d’autres éléments inutiles pour ma requête)

    Le problème est que plusieurs personnes ont créé des ‘multicomptes’ et se retrouvent pour le même LOGIN_CANDIDAT avec 2, parfois même 3, ID_CANDIDAT différents.
    J’aimerais écrire une requête sql qui pourrait supprimer les comptes en double ou triple dans ma table CANDIDATS et garder le dernier compte enregistré avec la DATE_CREATION la plus récente.

    J’ai déjà trouvé comment faire apparaitre tous les ‘multicomptes’ par la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT c1.NOM, c1.DATE_CREATION, c2.NOM, c2.DATE_CREATION FROM candidats c1, candidats c2 
    WHERE c1.LOGIN_CANDIDAT=c2.LOGIN_CANDIDAT AND c1.ID_CANDIDAT<>c2.ID_CANDIDAT;
    A terme j’aurais également voulu rajouter dans mon 'ctrl_formulaire.php' au moment de chaque nouvelles inscriptions, une requête permettant de comparer le nouveau login avec ceux déjà dans la bdd pour pouvoir supprimer l’ancien et garder le nouveau dans le cas ou celui-ci serait identique (sachant que ce login est une adresse mail donc il s’agira forcement du même candidat) mais je suis déjà bloqué par ce premier problème et je ne me trouve pas dans la rubrique php non plus.

    Merci d’avance de votre aide

    Mysqlement Maxime393

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Bonjour,

    Pour afficher le compte le plus récent regroupé par le login candidat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT LOGIN_CANDIDAT, MAX(DATE_CREATION)
    FROM candidats
    GROUP BY LOGIN_CANDIDAT
    Donc avec cette requête tu peut supprimer tous les comptes différents des dernier compte créé pour chaque login candidat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DELETE FROM candidat
    WHERE (LOGIN_CANDIDAT, DATE_CREATION) NOT IN (
        SELECT LOGIN_CANDIDAT, MAX(DATE_CREATION)
        FROM candidats
        GROUP BY LOGIN_CANDIDAT
    )
    Pour tester si la requête supprime bien ce que tu veut avant de lancer la suppression il te suffit d'afficher ce que la requête fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT ID_CANDIDAT
    FROM candidat
    WHERE (LOGIN_CANDIDAT, DATE_CREATION) NOT IN (
        SELECT LOGIN_CANDIDAT, MAX(DATE_CREATION)
        FROM candidats
        GROUP BY LOGIN_CANDIDAT
    )
    une réponse vous a permis d'avancer ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 40
    Points : 12
    Points
    12
    Par défaut merci
    Merci, je n'avais pas la bonne méthode..

    Il y a néanmoins un problème en exécutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM CANDIDATS WHERE (LOGIN_CANDIDAT, DATE_CREATION) NOT IN (SELECT LOGIN_CANDIDAT, MAX(DATE_CREATION) FROM candidats GROUP BY LOGIN_CANDIDAT)
    J'obtiens le message d'erreur suivant:

    "Error Code: 1093. You can't specify target table 'CANDIDATS' for update in FROM clause"

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    J'avais oublié le petit détail que MySQL ne peut pas supprimer des données dans une table A et dans la même requête récupérer des données de cette table A.

    Il faut alors passer par une table temporaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DELETE FROM candidat
    WHERE (LOGIN_CANDIDAT, DATE_CREATION) NOT IN (
        SELECT tmp.LOGIN_CANDIDAT, tmp.maxDate
        FROM ( SELECT LOGIN_CANDIDAT, MAX(DATE_CREATION) maxDate
               FROM candidats
               GROUP BY LOGIN_CANDIDAT
        ) tmp
    )
    une réponse vous a permis d'avancer ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2012
    Messages : 40
    Points : 12
    Points
    12
    Par défaut
    Merci beaucoup, je suis nouveau la dedans et je ne maitrise pas encore les tables temporaires. Merci encore pour ton aide !

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

Discussions similaires

  1. Problème requête MySql en fonction du serveur
    Par Lowbaka dans le forum Requêtes
    Réponses: 8
    Dernier message: 31/12/2010, 13h22
  2. problème requête MySql en vb 2008
    Par walid kh dans le forum VB.NET
    Réponses: 0
    Dernier message: 17/03/2010, 13h30
  3. [MySQL] Problème requête Mysql
    Par jbtz64 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 28/05/2008, 14h08
  4. Problème requête MySQL
    Par low-ik dans le forum Requêtes
    Réponses: 4
    Dernier message: 12/03/2007, 16h04
  5. Problème requête MySql & builder
    Par boopix dans le forum C++Builder
    Réponses: 19
    Dernier message: 09/03/2007, 02h04

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