2009-09-30 10 views
0

Hay, j'ai créé une araignée pour explorer un document PDF et enregistrer chaque mot du document dans une table dans une base de données MySQL.Rendre la table MySQL unique

De toute évidence, des mots tels que 'le', 'et', 'ou' etc. apparaissent dans un livre plusieurs fois.

Je me demande simplement quelle est la méthode la plus rapide pour supprimer les valeurs de dupe d'une table?

Répondre

3

Créer une table sans indexation des mots et mettre tous les mots du livre en utilisant des inserts de masse (vous pouvez également utiliser LOAD DATA). Lorsque vous avez terminé avec des insertions, ajouter un nouvel indice sur le terrain word

Ensuite, créez une deuxième table en utilisant:

CREATE TABLE newTable SELECT DISTINCT word FROM oldTable 
0
delete from words where idcolumn not in 
    (select min(idcolumn) 
    from words T2 
    where T2.plain = WordsTable.plain) 

Cela fonctionne si vous avez ajouté (idcolumn, plain) pour chaque mot trouvé.

Si vous n'avez pas de colonne id (pk), vous pouvez utiliser la solution d'Anax.

En plus de ne pas insérer de doublons (commentaire de codeburger), vous pouvez simplement définir un index unique sur votre colonne simple.

+0

la table des mots est appelé « mots » et le champ contenant le mot est « simple » – dotty

0

sélectionnez distinct sur le champ de mot, puis supprimez toutes les lignes qui ont un ID différent? Je ne suis pas un maître dans les sous-requêtes donc pas d'exemple atm :)

1

Au lieu de supprimer les doublons, vous pouvez vous assurer qu'il n'y a jamais de doublons dans la table.

présumant votre table ne dispose que de 2 champs, id et mot:

INSERT INTO table SELECT null, 'word' FROM table WHERE NOT EXISTS (SELECT * FROM table WHERE word = 'word') LIMIT 1; 

Ceci va insérer le mot dans la table que si elle est pas déjà là

1

Si vous pouvez exécuter à nouveau le script pour remplir la base de données, vous pouvez ajouter un cadre unique touche sur le champ "mot" et au lieu de INSERT INTO faire un REPLACE INTO. Cela supprimera l'instance précédente de l'enregistrement avant d'ajouter un champ en double. Ce n'est peut-être pas la façon la plus efficace de le faire, mais c'est plutôt simple. Voir ici pour plus de détails:

http://dev.mysql.com/doc/refman/5.0/en/replace.html