17. maj 1999 - 09:29Der er
2 kommentarer og 1 løsning
Fjerne dubletter fra database?
Jeg har en acces database der indeholder en masse email-adresser, som der er blevet tilføjet via en form, som tjekker for at der nu står noget i. Men problemet er at den virker ikke altid, så der er mange entrys bare med "din email her" eller flere entrys med samme email-adresse, da der er nogle folk der er utålmodige. Er der en der gider at hjælpe mig med at lave et ASP script der fjerner alle entrys der er mere end een af, og så beholder de unikke?
Jeg har lavet dette SQL script som laver en ny database og kopier de enkle email-adresser til den ny.
BEGIN TRANSACTION SET QUOTED_IDENTIFIER ON GO SET TRANSACTION ISOLATION LEVEL SERIALIZABLE GO COMMIT BEGIN TRANSACTION CREATE TABLE dbo.Tmp_Email ( Email char(255) NULL, ) GO IF EXISTS(SELECT * FROM dbo.Email) EXEC('INSERT INTO dbo.Tmp_Email(Email) SELECT DISTINCT Email FROM dbo.fotos TABLOCKX') GO DROP TABLE dbo.fotos GO EXECUTE sp_rename 'dbo.Tmp_fotos', 'fotos' GO COMMIT
Hvorfor laver du ikke et indeks på email-feltet for at undgå dubletter. Der skal så selvfølgelig også laves lidt fejlhåndtering (for ikke at smide rå databasefejl i hovedet på webbrugere). Med hensyn til at fjerne de dubletter du allerede har i databasen, kan du gøre det på 2 måder. Hvis der ikke er for mange poster kan du blot sortere efter email, og derefter manuelt rydde ud i tabellen. På denne måde kan du holde styr på hvad der står i resten af felterne i tabellen, og beholde den bedste. Hvis der er for mange poster til denne metode, skal du vælge et kriterium for sletningen af dubletterne. Det nemmeste (men ikke nødvendigvis det bedste) er at (ACCESS 97) lave en ny tabel med samme struktur som tabellen med dubletter, sætte et indeks ("ingen dubletter") i emailfeltet, og så køre en tilføjelsesforespørgsel (se evt. Access-hjælpeemnet: "Automatisk slette dublerede poster fra en tabel"). Det vil bruge den første værdi (efter primærnøglen i dublettabellen) og slette alle dubletter herefter. Hvis du har et andet kriterium (f.eks. at beholde den sidst oprettede post) kan dette flettes ind i tilføjelsesforespørgslen.
Det jeg ville gøre i dit tilfælde, er at starte på helt bar bund og så slette alle de poster der er i databasen, hvís det ikke er noget der er MEGET vigtigt for dig at gemme.
Det jeg så ville gøre er enten 1. at lave et javascript der checker om alt det er udfyldt, og hvis det er så smide det videre fra din form.
2. Så ville jeg checke om den email der er skrevet allerede er i databasen, og så sammenligne de andre felter i formen med alle de former der hører til den email. Hvis vi tænker os det er en gæstebog, ville jeg sammenligne det som personen har skrevet, med andre ting som er skrevet at samme person for at undgå dupletter.
Hvis det er det som du søger er du velkommen til at svare, og skulle det være et direkte script til bare at rydde op til dig - tja... så er det også til at lave, det er ikke det, men det vil være noget der tager lang tid for dig at køre, og for mig at se er det meget uhensigtsmæssigt.
Venligst Ernst / A.ka. Junior
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.