Avatar billede Slettet bruger
09. november 2002 - 16:30 Der er 20 kommentarer og
1 løsning

Funktion til at fjerne duplikerede poster

Hej.

jeg har brug for en funktion som løber min database igennem for poster hvor artist = $artist og track = $track og sletter de duplikerede poster, således at et post kun optræder EN gang i tabellen!

Er 60 points tilstrækkeligt!?
Avatar billede nemeier Nybegynder
09. november 2002 - 17:10 #1
Har du en entydig key på din tabel, f.eks. id som afviger fra post til post ?
Avatar billede Slettet bruger
09. november 2002 - 17:20 #2
ja....
og jeg har feltet IP som skal oversees når vi ser om der er duplikerede poster!
Avatar billede achrist Nybegynder
09. november 2002 - 17:30 #3
Hvis du selv gider finpudse koden, er 60 points nok!

Forudsat at du anvender MySQL, kan du løse det efter følgende SQL-kode:

Find antal poster med "Select count(*) from tabel where artist = $artist and track = $track".

Hvis count > 1, laver du en

"Delete from tabel where artist = $artist and track = $track LIMIT (count - 1)".
LIMIT er specifik for MySql og kan ikke nødvendigvis bruges hvis du anvender en anden database.
Avatar billede tipsen Nybegynder
09. november 2002 - 17:48 #4
Hvis du laver det ordentligt splitter du i 2 tabeller - en med artists og en med numre og et id som linker tilbage til artist-tabellen!
Avatar billede Slettet bruger
09. november 2002 - 17:50 #5
achrist > Kan du ikke skrive funktionen for mig.... for 100 points
Avatar billede tipsen Nybegynder
09. november 2002 - 18:03 #6
philip: Hvis du øver dig på php, vil jeg anbefale dig at læse noget litteratur om det - lån nogle bøger på biblioteket og hvis engelsk ikke lige er et hit, så prøv evt. idg-hæftet til 69.-
Avatar billede achrist Nybegynder
09. november 2002 - 18:14 #7
Er udgangspunktet et PHP online-system, hvor du står med en kendt kombination af $artist og $track, eller handler det bare om en gang for alle at rydde op i en database?
Avatar billede Slettet bruger
10. november 2002 - 00:09 #8
achrist > Udgangspunktet er at jeg skal rydde op i databasen. Koden skal optimeres så det tager mindst muligt tid at unføre operationen!
Avatar billede Slettet bruger
10. november 2002 - 00:40 #9
Jeg vil gerne have konkret kode! :D
Avatar billede tipsen Nybegynder
10. november 2002 - 00:47 #10
I fremtiden skal du jo bare sørge for ikke at indsætte dubletter i tabellen - det er forholdvis nemt at styre vha. mysql.
Avatar billede Slettet bruger
10. november 2002 - 01:04 #11
det kan jeg ikke finde ud af ... har prøvet at oprette spm:

http://www.eksperten.dk/spm/280618
Avatar billede achrist Nybegynder
10. november 2002 - 11:30 #12
Hvis det drejer sig om et engangsjob til oprydning, har du løsningen her.

Der er ingen grund til at benytte PHP, det kan klares i ren sql. Hvis du har en god frontend til MySQL, så benyt den. Hvis ikke, så download MySQL Front her: http://www.pcworld.dk/download.asp?Mode=2&ProgramID=705

1. Først skal du lave en kopi af din tabel, hvor ale dubletter er fjernet. Det kan du gøre med denne sql-kommando underfanebladet "SQL Query":

"CREATE TABLE nytabel SELECT artist, track, ipnr FROM tabel GROUP BY concat(artist, track) HAVING Count(concat(tabel.artist, tabel.track))>=1"

Hvis din tabel indeholder andre felter en de tre, skal du naturligvis tilføje dem til SELECT'en.

Nu indeholder den nye tabel kun rækker der varierer på kombinationen af artist og track. (For at se tabellen skal du nok trykke F5 for Refresh).

2. Nu kan du droppe den originale tabel (højreklik op vælg drop table) og kopiere.

3. Du skal så kopiere den nytabel tilbage i den oprindelige tabel:

"CREATE TABLE tabel SELECT artist, track, ipnr FROM nytabel"

Med hensyn til at forhindre dubletter i dit program, er der mange måder at gøre det på. Den mest enkle er måske at definere et unikt index bestående af artist og track. Det vil sikre, at dubletter bliver afvist.
Avatar billede Slettet bruger
10. november 2002 - 11:34 #13
Hvordan gør jeg sådan at der ikke kan være flere felter med ens værdi i TRACK?

jeg vil mene at det vil virke!
Avatar billede achrist Nybegynder
10. november 2002 - 11:59 #14
Du definerer et entydigt index bestående alene af kolonnen track.

En alternativ metode er først at lave en SELECT med en 'WHERE track = "$track"', hvor $track indeholder den titel du eventuelt skal indsætte. Hvis denne SELECT returnerer en række, skal du selvfølgelig undlade at indsætte den nye.
Avatar billede Slettet bruger
12. november 2002 - 00:31 #15
jeg skal vist have noget konkret kode til den funktion... ellers kommer jeg ikke videre!
Avatar billede achrist Nybegynder
13. november 2002 - 20:08 #16
Hvad er der i vejen for at gøre præcis som jeg har beskrevet ovenfor? Der er ikke nogen funktion at skrive "konkret kode til".
Jeg har forklaret dig, at du ikke behøver at lave en funktion men at du kan klippe-klistre sql-kommandoerne ind i f.eks. MySQL Front, nøjagtig som de er serveret for dig.
Hvis der er noget konkret, du ikke kan finde ud af undervejs, er du selvfølgelig velkommen til at spørge, men det er bare med at komme i gang, - ellers bliver du ikke en pind klogere og vil blive ved med at skulle forlange "konkret kode".
Avatar billede Slettet bruger
13. november 2002 - 20:55 #17
jeg kan ikke bruge et stykke klippe-klistre mysql igennem phpmyadmin... Den skal køres når brugere opretter i databasen, fordi der ikke er nogen som kan svare mig på følgende:

http://www.eksperten.dk/spm/280618
Avatar billede achrist Nybegynder
13. november 2002 - 21:11 #18
Hør lige her...

Du har oprettet et spørgsmål, hvor du har bedt om hjælp til at rydde op i en database, som indeholder dubletter. Det har du fået. Oprydning er et engangsjob, som det vil være pjat at lægge ind i et PHP-script, men hvis du endelig vil, kan du jo bare gøre det alligevel. Du har fået opskriften. Så brug den dog. Hvis ikke du vil klippe klistre, så skriv af.

Dernæst har du fået adressen på et værktøj - MySQL Front - som kan hjælpe dig. Hvorfor bruger du det så ikke? (Noget andet er, at jeg ikke kan se, hvorfor du ikke skulle kunne bruge PHPMyAdmin - det har bare en ringere brugergrænseflade).

For det tredje har jeg også fortalt dig, hvordan at du kan undgå dubletter fremover ved at lave et unikt indeks på din tabel. Har du gjort det? Hvis ikke: Hvorfor?

Endelig: Du kan vel ikke i ramme alvor forvente, at jeg - eller andre - skal være forpligtede til også at svare på et andet spørgsmål du har oprettet på Eskperten.dk, ´som forudsætning for at du kan lukke dette spørgsmål.
Avatar billede Slettet bruger
16. november 2002 - 14:52 #19
Stadigvæk ikke noget jeg kan bruge... Lukker spørgsmålet
Avatar billede tipsen Nybegynder
16. november 2002 - 16:35 #20
philip: Det kan være du skal overveje at ændre attitude her på Eksperten, hvis du regner med at bruge sitet i længere tid.
Avatar billede Slettet bruger
16. november 2002 - 20:05 #21
jeg har været her siden 99...
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester