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

PHP & Base de données Discussion :

Requête de dédoublonnage [MySQL]


Sujet :

PHP & Base de données

  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 Requête de dédoublonnage
    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 sql : 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 AND  c1.DATE_CREATION>c2.DATE_CREATION;

    J'ai supprimé ces doublons manuellement 1 par 1 étant donné mon niveau en la matière ainsi que le faible nombre de ces multicomptes (8 au total)

    Je voudrais à présent 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).

    Si quelqu'un pouvait m'aider sur ce point je lui en serais reconnaissant.
    Merci d'avance de vos conseils.

    Respectueusement,
    maxime393

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il vaut mieux empêcher la création d'un compte avec un email existant ; sinon en mettant l'email de quelqu'un d'autre, je lui écrase son compte.

    Ta requête de comparaison c'est simplement par exemple
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) FROM candidats WHERE LOGIN_CANDIDAT="xxxxx";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  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
    Tout d'abord merci de votre réponse!
    Oui, empécher de créer des double comptes serait bien mieux.

    Cela peut il marcher si je met cette portion de code juste avant l'enregistrement du nouveau candidat dans la base de données?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $double="SELECT LOGIN_CANDIDAT FROM CANDIDATS";
    $dmail=mysql_query($double) or die('Erreur SQL!<br>'.$double.'<br>'.mysql_error());
     
    while($data = mysql_fetch_assoc($dmail))  
    {
     if ($email == $data["LOGIN_CANDIDAT"])
    	{
    		header('Location: ../view/ajouterreur.php');
    	}
    }

  4. #4
    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
    Bon cela ne marche définitivement pas, la question serait plutôt: Quel est mon erreur ?

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Quel est mon erreur ?
    Ne pas avoir suivi ce que je t'ai montré
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    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
    Il y a quelque chose que j'ai raté du coup. J'essaie d’empêcher la création d'un compte avec un email existant.. et je ne vois absolument pas comment
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) FROM candidats WHERE LOGIN_CANDIDAT="xxxxx";
    pourrait me servir..
    Si tu pouvais donner quelques précisions, je pense que je vais passer ma journée dessus..

  7. #7
    Invité
    Invité(e)
    Par défaut
    Ca t'affiche le nombre d'entrée dans ta base concernant ce login.
    Si c'est 0 le login n'est pas utilisé

  8. #8
    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
    Ok merci de ta réponse! Mais j'ai encore une erreur de syntaxe..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $double="SELECT COUNT(*) FROM candidats WHERE LOGIN_CANDIDAT="$email"";
    $dmail = mysql_query($double) or die('Erreur SQL !<br>'.$double.'<br>'.mysql_error());  
     
     if ($dmail != 0)
    	{
    		header('Location: ../view/ajouterreur.php');
    	}
    "Parse error: syntax error, unexpected '$email' (T_VARIABLE)"

    Ah nan c'est bon pour la syntaxe mais en revanche je dois quand même avoir quelques erreurs car en créant 2 fois le même compte le profil se créé correctement et ne renvoie pas sur la page d'erreur

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $double='SELECT COUNT(*) FROM candidats WHERE LOGIN_CANDIDAT="' . mysql_real_escape_string($email) . '"';
    $dmail = mysql_query($double);
    $row = mysql_fetch_array($dmail, MYSQL_NUM);  
    if ($row[0] != 0) {
    		header('Location: ../view/ajouterreur.php');
    	}
    Au passage, l'extension mysql_ est obsolète, passe à PDO.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    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 ! Ça marche parfaitement je verrais la PDO pour une prochaine fois.

  11. #11
    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
    Bonjour,
    désolé de rouvrir cette discussion mais j'ai un problème.
    Lorsque je test en local ce code en créant un compte avec un mail déjà existant je suis bien redirigé sur la page adéquate.
    Par contre lorsque je met celui ci en ligne, la création se fait correctement mail existant ou pas... J'ai vérifié les droits des fichiers .php et les ait tous mis en 755.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $double='SELECT COUNT(*) FROM candidats WHERE LOGIN_CANDIDAT="' . mysql_real_escape_string($email) . '"';
    $dmail = mysql_query($double);
    $row = mysql_fetch_array($dmail, MYSQL_NUM);  
     
    if ($row[0] == 0) 
    {
    //Enregistrement dans la bdd de toutes les données
    header('Location: ../view/ajoutcandidatok.php');
    }
     
    else
    {
    header('Location: ../view/erreurdoublemail.php');
    }

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut debuguer.

    Commence par afficher ta requête.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    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
    Je n'arrive pas à afficher $dmail, ça me met ressource id 6ou quelque chose du genre.
    Par contre $row renvoie bien 0 lorsque adresse mail inexistante 1, 2, ect... quand elle existe déjà..

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je n'arrive pas à afficher $dmail
    La requête c'est $double. $dmail c'est le resultat de mysql_query()

    ou quelque chose du genre
    de manière générale donne nous précisément les erreurs.

    Par contre $row renvoie bien 0
    $row est un tableau, c'est $row[0]qui contient la valeur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    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

    Il suffisait de tester et chercher. Encore merci Sabotage !

    J'ai opté pour:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $double='SELECT COUNT(*) AS b FROM candidats WHERE LOGIN_CANDIDAT="' . mysql_real_escape_string($email) . '"';
    $dmail = mysql_query($double);
    //$row = mysql_fetch_array($dmail, MYSQL_NUM);  
     
    while($data = mysql_fetch_assoc($dmail))
     {
        if ($data['b'] != 0)
    	{
    	header('Location: ../view/erreurdoublemail.php');
    	}
    else
    {//enregistrement bdd}
    et ça marche.

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

Discussions similaires

  1. Dédoublonnage sur requête SQL
    Par cadoudal56 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/07/2011, 12h19
  2. Requête dédoublonnage SQL
    Par lebron23000 dans le forum Requêtes
    Réponses: 2
    Dernier message: 19/06/2007, 12h55
  3. [Requête]Dédoublonnage complexe
    Par decour dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 27/03/2007, 14h20
  4. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  5. [BDD] Enregistrer le résultat d'une requête
    Par Mowgly dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/06/2002, 15h26

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