30. oktober 2008 - 17:26Der er
19 kommentarer og 1 løsning
Oprydning af database (jeg vil kun have hver post en gang)
Hej,
Jeg har en database med 15-20 punkter.
Hver post bør være unik, men mit cronejob at kørt scripet lidt oftere end planlagt og har således tilføjet data til databasen 3 gange i døgnet i stedet for kun en gang.
Jeg har et felt til hver post som indeholder datoen.
Er det ikke muligt at lave en automatisk sletning af databasen så der kun fremkommer unikke poster (hvor jeg beholder den nyeste post)?
Rettet cronejobbet så det kun kører en gang i døgnet.
Jeg ved 100% hvordan min database ser ud. Det jeg spørger om er hvordan jeg laver en søgning som returnerer alle poster som indeholder dubletter inde for det samme døgn hvorefter jeg så kan slette dem eller alternativt noget ala...
DELETE * FROM tabel1 WHERE "der findes dubletter".
Jeg har et felt som hedder added som indeholder TIMESTAMP (xxxx-xx-xx 00:00:00).
For hver ID er der et added felt og hvis der er to identiske ID'er inde for samme døgn skal de resterende findes og slettes så der kun forefindes en post for hver ID inde for samme døgn.
Jeg kan godt tælle hvormange punkter der er i databasen, men kunne ikke se relevansen i forhold til mit spørgsmål.
Databasen indeholder pt. ca. 1.000.000 poster.
Synes godt om
Slettet bruger
30. oktober 2008 - 22:10#5
Jamen det er jo meget nemt!
Du skal ind i phpmyadmin og lave/køre en SQL'er der rydder op.
*sikkerhedskopi* og atter *sikkerhedskopi*
Men for din egen skyld og sikkert en masse andre, øv dig først på en kopi så du er sikker på at oprydningen bliver korrekt.
Da du selv ved 100% hvordan din database ser ud er det også kun dig selv der kan lave den korrekt SQL'er.
Jeg kan stadig ikke se at tabellens opbygning har betydning udover jeg har oplyst at de styrende felter er ID og ADDED. Alt der imellem følger med om der så var 100 punkter hvis kan laver en SQL som udvælger *, eller er det mig der tager fejl der.
Jeg skal gerne oplyse tabellens opbygning hvis det har en betydning...
Ved du hvordan det kan gøres eller?
Synes godt om
Slettet bruger
30. oktober 2008 - 22:47#7
er det noget i denne retning du mener? før: id | a | b 1 | 1 | 2 2 | 1 | 2 3 | 2 | 3 5 | 3 | 4
Umiddelbart vil dit forslag tage * fra tabel 1 og sammenlige det med * fra tabel 2 hvor id'et i tabel 1 og 2 er ens og added i tabel 2 er større end i tabel 1.
Jeg har kun en tabel hvor det hele ligger i og jeg har samme id med mange forskellige datoer (problemet er der hvor jeg har samme id med samme dato).
id er ikke unikt i tabellen men unikt i forhold til datoen. Jeg bruger id'et til at se ændringer i dataen forhold til dagen før.
Synes godt om
Slettet bruger
31. oktober 2008 - 11:50#12
Hej igen Uden at have en løsning på problemet vil jeg lige komme med nogle betragtninger.
Først drejer det vel sig om at få de rigtige rækker ud, tømme tabellen og lægge de rigtige ind.
Det kunne f.eks være noget der lignede dette: (DET ER TOTAL UTESTET) INSERT INTO dinTabel (id, a, added) SELECT DISTINCT id, a, added FROM kopidinTabel
Men her er lige en ting der skal huskes på, det er TIMESTAMP. Timestamp feltet skal ændres til DATETIME før de rigtige lægges ind og derefter ændres tilbage, fordi timestamperen den gør som den skal.
Jeg skal bruge de unikke ID'et sammenholdt med added feltet, altså er der gået 10 dage har jeg 10 ens id'er og 10 forskellige dage.
Problemet er bare at jeg pt. har måske 20 id'er og 10 datoer i en 10 dages periode, da added tages via timestamp og scriptet er kørt 2 dange i døgnet og nogle gange flere.
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.