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 :

Nettoyer les "doublons"


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Par défaut Nettoyer les "doublons"
    Je m'explique.
    J'ai une table avec toutes les villes aux USA (etat , latitude , longitude..) , j'aimerais la nettoyer pour avoir l'association des champs CITY_NAME et ZIPCODE unique (sorte de clé primaire)

    la table s'appelle cities.
    les champs en question zipcode et city_name.

    Je pourrais fabriquer un script php qui le fasse mais y a t-il plus rapide en une simple requete MYSQL ?

    Genre reconstruire la table en mettant des contraintes puis en important les données? (mais l'import sera bloqué ...)
    merci

  2. #2
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    En faisant un group by sur les 2 colonnes, ça devrait convenir.

  3. #3
    Membre éclairé
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Par défaut
    j'ai tenté ceci mais j'ai une erreur dans le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DELETE FROM cities WHERE city_id IN (
    SELECT FROM cities
    WHERE city_name = 'Holtsville' && zipcode = '501'
    )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $sql = "SELECT city_name,zipcode FROM cities ORDER BY city_id";
     
    $query = mysql_query($sql);
    while($e = mysql_fetch_array($query))
    {
    	$city_name = $e["city_name"];
    	$zipcode = $e["zipcode"];
     
     
    	$sql2 = "DELETE FROM cities WHERE city_id IN SELECT FROM cities WHERE city_name = '$city_name' && zipcode = '$zipcode'";
    	$query2 = mysql_query($sql2);
     
     
     
    }

  4. #4
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    A ta place, j'aurais fait une seconde table avec les mêmes noms de colonnes, pour y insérer les lignes dédoublonnées, après contrôle, tu supprimes la 1ère(ou tu la renommes), et tu renommes également la nouvelle table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT nouvelle_table(city_name,zipcode)
    SELECT city_name, zipcode FROM cities GROUP BY city_name, zipcode);
    Ou alors sinon, tu sélectionnes les ids, et tu supprimes les entrées n'étant pas dans la liste.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = "SELECT city_id FROM cities GROUP BY city_name, zipcode"; 
    $query = mysql_query($sql);
    $array_id = array();
    while($e = mysql_fetch_array($query))
      $array_id[] = $e['city_id'];
     
    $sql = 'DELETE FROM cities WHERE city_id NOT IN(' . implode(',', $array_id) . ')':
    $query = mysql_query($sql);

  5. #5
    Membre éclairé
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Par défaut
    merci .
    Je devais pas être très loin.

  6. #6
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Mais attend, y'a plus simple en fait, il suffit simplement de mettre directement tes 2 colonnes en unique en indiquant ignore, je suis con

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER IGNORE TABLE cities ADD UNIQUE(city_name, zipcode);
    Beaucoup plus rapide à faire

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

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