2010-06-02 12 views
0

J'ai reçu un tableau avec des colonnes: nom de l'auteur, nom de l'auteur et titre du livre Plusieurs utilisateurs insèrent dans la base de données, via une importation, et j'aimerais éviter les doublons. Je suis en train de faire quelque chose comme ceci: J'ai un enregistrement dans la db: Prénom: "Isaac" Nom: "Assimov" Titre: "I, Robot"Recherche par titre et par auteur

Si l'utilisateur essaie de l'ajouter à nouveau, ce serait essentiellement un texte non divisé (ne serait pas divisé en prénom d'auteur, nom d'auteur, et titre de livre) Donc, il ressemblerait à ceci: "Isaac Asimov - I Robot" ou "Asimov, Isaac - I Robot" ou "I Robot par Isaac Asimov"

Vous voyez où je veux en venir?

(Je ne peux pas forcer l'utilisateur à diviser tous les livres en prénom d'auteur, nom d'auteur et titre de livre, et je n'aime même pas l'idée de forcer l'utilisateur, car ce n'est pas trop facile)

Quelle est la meilleure façon (en SQL) de comparer tous ces scénarios possibles de livre de données à ce que j'ai dans la base de données, de ne pas ajouter deux fois le même livre. Je pensais à une possibilité de suggérer à l'utilisateur: "est-ce le livre que vous essayez d'ajouter?" (Imaginez une liste au lieu de ce mot, comme sur stackoverflow - poser des questions -. Questions connexes

Je pensais à

soundex 

et peut-être même les

like 

opérateurs, mais Jusqu'à présent, je n'ai pas obtenu les résultats que j'espérais

+0

Je ne comprends pas pourquoi vous avez rejeté l'idée de forcer l'utilisateur à diviser tous les livres en prénom d'auteur, nom d'auteur et titre de livre à l'entrée des données. C'est la seule façon d'obtenir des résultats fiables. –

+0

l'utilisateur aura pratiquement une liste de livres dans un txt, je vais importer cette ligne par ligne ... – Ash

Répondre

0

Vous pouvez implémenter des algorithmes significativement meilleurs pour la correspondance floue que soundex/difference, jetez un oeil à Beyond SoundEx - Functions for Fuzzy Searching in MS SQL Server.

Vous pouvez aussi regarder à mettre en œuvre un catalogue de texte intégral et en utilisant le style « moteur de recherche » FREETEXT() qui:

est un prédicat utilisé dans une clause WHERE pour rechercher des colonnes contenant types de données à base de caractères pour les valeurs qui correspondent au sens et pas seulement le libellé exact des mots dans la condition de recherche

en fonction de ce que vous faites yo Vous pourriez également utiliser un service Web ISBN pour obtenir des données normalisées.