17. juli 2007 - 16:51Der er
5 kommentarer og 1 løsning
Dubletter i én tabel
Jeg har fået en tabel der er blevet lagt sammen af flere, problemet er at jeg har dubletter i denne tabel.
Der er ud over navn og email 13 felter med kategorier, i disse 13 felter kan der stå enten yes eller ikke noget.
Det jeg godt vil have gjort er at sammenligge de personer der er ens, jeg sammenligner ud fra emailadressen, har de samme email er det samme person. Men personerne kan godt have forskellige yes angivelser i de forskellige kategorier.
Jeg vil gerne ende op med at der er én af hver person, men at de kategorierne bliver sammen lagt, så den ene person ender op med at have yes i alle de kategorier som alle dubletterne også havde.
Hvis person 1 og person 2 har samme email, men person har yes i kategori01 og kategori02, person har yes i kategori05 og kategori06. Så vil jeg gerne ende op med person 1 som har yes i kategori01, kategori02, kategori05 og kategori06. og person 02 bliver så slettet fra databasen.
it sounds as though you should normalise your database.
a table with person information, another table with different categories and then a link table which contains relationships between the two table and also a field containing yes/no
Synes godt om
Slettet bruger
17. juli 2007 - 19:30#2
Yeah I know, it isnt my db, im just helping out, I want to have it cleaned up before changing the layout.
You will need to make the new tables and then make some queries which copies the data from the old table into the new. There is obvioulsy some manual work in designing the new tables and making the queries, but you wont need to cut and paste data between tables.
If you can make the new tables I can assist with making the new queries once I know the layoutof your tables.
Synes godt om
Slettet bruger
18. juli 2007 - 09:20#6
Du kan dele det op i en forespørgsel pr. kategori...
Dvs. du laver 13 forespørgsler a'la: SELECT PersonTabel.email, PersonTabel.kategori01 FROM PersonTabel GROUP BY PersonTabel.email, PersonTabel.kategori01 HAVING (((PersonTabel.kategori01)=True)); osv.. en for hver kategori
Så laver du en som finder den første (eller sidste) person for hver email, a'la: SELECT First(PersonTabel.Person) AS FirstOfPerson, PersonTabel.email FROM PersonTabel GROUP BY PersonTabel.email;
og så sætter du dem sammen, bare husk at du skal ikke have group by og du skal lave alle joints så de viser alle personer, men kun de kategorier, som har samme email. I mit forsøg, som havde 3 kategorier, kom det til at se sådan ud: SELECT KatFirstPerson.FirstOfPerson AS Person, KatFirstPerson.email, Kat01.kategori01, Kat02.kategori02, Kat03.kategori03 FROM ((KatFirstPerson LEFT JOIN Kat01 ON KatFirstPerson.email = Kat01.email) LEFT JOIN Kat02 ON KatFirstPerson.email = Kat02.email) LEFT JOIN Kat03 ON KatFirstPerson.email = Kat03.email;
Du laver så en kopi af din tabel, sletter alle data og kopier disse data over i den. Så skulle du have det ønskede resultat!~)
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.