Mon application Web analyse les données d'un fichier téléchargé et l'insère dans une table de base de données. En raison de la nature des données d'entrée (données de transaction bancaire), des données en double peuvent exister d'un téléchargement vers un autre. Pour le moment, j'utilise un code hideusement inefficace pour vérifier l'existence de doublons en chargeant toutes les lignes de la base de données dans la mémoire de la base de données et en les parcourant et en comparant chacune des données téléchargées. Inutile de dire que cela peut devenir très lent à mesure que la taille du jeu de données augmente. Donc, je cherche à remplacer cela par une requête SQL (par rapport à une base de données MySQL) qui vérifie l'existence de données dupliquées, par ex.Instruction MySQL SELECT utilisant Regex pour reconnaître les données existantes
SELECT count(*) FROM transactions WHERE desc = ? AND dated_on = ? AND amount = ?
Cela fonctionne très bien, mais mon cas réel est un peu plus compliqué. La description d'une transaction dans les données d'entrée peut parfois contenir une ponctuation erronée (par exemple, "BANK 12323 DESCRIPTION" peut souvent être représenté par "BANK.12323.DESCRIPTION") donc notre logique de correspondance existante (en mémoire) effectue un peu de nettoyage sur cette description avant de faire une comparaison.
Bien que cela fonctionne dans la mémoire, ma question est peut ce nettoyage se fait dans une instruction SQL je peux déplacer cette logique correspondant à la base de données, quelque chose comme:
SELECT count(*) FROM transactions WHERE CLEAN_ME(desc) = ? AND dated_on = ? AND amount = ?
Où CLEAN_ME est un proc qui bandes le champ des données erronées. Il est évident que la solution la plus propre (sans jeu de mots!) Consisterait à stocker les données déjà nettoyées dans la base de données (soit dans la même colonne, soit dans une colonne séparée), mais avant que j'y pense J'essaierais de voir s'il y a une façon plus intelligente de contourner cela.
Merci beaucoup
Je pense que ce devrait plutôt être 'BANK [. ] 12323 [. ] DESCRIPTION 'pour éviter autant que possible les faux positifs. – Tomalak