XmasB Quotes har rundet 2000 nedlastinger Jeg vurderer å selge bilen
mai 27

Jeg har etterhvert skaffet meg en pen liten samling sitater i en MySQL tabell som brukes til WordPress-innstikket XmasB Quotes. I skrivende stund er det cirka 140001 sitater totalt. Du ser et tilfeldig av disse til høyre på min hjemmeside.

14000 sitater er selvfølgelig ikke et resultat av manuelle måter å legge de inn på. Jeg har laget et lite program som gjør om en liste til MySQL setninger for å legge det inn. Dermed legger jeg inn flere tusen på noen sekunder, gitt at jeg har en liste over sitatene å hente fra. Som et resultat av denne måten å gjøre det på har jeg fått mange duplikater i samlingen2. Cirka 500 var det før jeg fjernet de tidligere idag. Så hvordan fjerner man duplikater fra en MySQL tabell?

Det finnes sikkert mange måter å gjøre en slik jobb på. Jeg valgte å gjøre det enkelt, med enkle spørringer og en midlertidig tabell.

  1. Først lager jeg en midlertidig tabell hvor duplikatene er luket ut:
    CREATE TABLE quotes_temp AS
    SELECT * FROM wp_xmasb_quotes
    GROUP BY quote, author

    Den nye tabellen vil nå kun inneholde sitatene hvor “quote” og “author” til sammen er unikt, det sørger klausulen “GROUP BY” for.
  2. Neste skritt - tømme den originale tabellen:
    TRUNCATE wp_xmasb_quotes
    TRUNCATE fjerner innholdet på samme måte som en DELETE kommando3. Backup er selvfølgelig tatt på forhånd? Kjedelig å miste data…
  3. Kopier innholdet fra temp tabellen inn i den originale:
    INSERT INTO wp_xmasb_quotes SELECT * FROM quotes_temp
  4. Slett den temporære tabellen:
    DROP TABLE quotes_temp

Verre er det ikke.

  1. Fjorten tusen, ja []
  2. Jeg kunne selvfølgelig sjekket for duplikater når jeg legger sitatene inn, men det gjør jeg altså ikke. []
  3. Men TRUNCATE er ikke det samme som en DELETE - den vil blant annet ikke returnere antall rader slettet. Den vil heller ikke trigge ON DELETE []

Related posts

9 Responses to “Slette duplikater fra MySQL”

  1. Gravatar
    André Says:

    Enkel måte å gjøre det på, selv om det kan være litt skummelt om noe krasjer under veis :P

  2. Gravatar
    XmasB Says:

    Det er jo derfor man tar backup, André. I verste fall er det jo da bare å kjøre “undo”. Jeg tar alltid backup når jeg jobber direkte på dataene i WordPress. Først og fremst fordi det er så enkelt, og en grei sikkerhet å ha.

  3. Gravatar
    Grim Says:

    Men du tar jo ikke høyde for forskjellig tegnsetting eller store/små bokstaver :) Fjern alle mellomrom og tegn, gjør alt til store bokstaver og *så* fjerner du duplikater. Nå har vi selvsagt ikke tatt hensyn til britisk og amerikansk staving, men det får bli en hjemmelekse til neste gang.

  4. Gravatar
    Fredelig Says:

    Ser ut som “don’t” nå vises som “don't” etter oppryddingen din… ;)

    eks.
    If there is not the war, you don't get the great general; if there is not a great occasion, you don't get a great statesman; if Lincoln had lived in a time of peace, no one would have known his name.
    Theodore Roosevelt

  5. Gravatar
    André Says:

    Som de sier finnes det to typer mennesker i verden. De som tar backup og de som aldri har slettet en harddisk før :P

  6. Gravatar
    XmasB Says:

    Sant nok, Grim. Men jeg tar høyde for det når jeg fyller tabellen i programmet mitt (og også i innstikket), så det er ikke så nøye i mitt tilfelle. Jeg får rette på dette etterhvert så vi får det ordentlig.

    Det er ikke på grunn av oppryddingen, men en liten bug i .net programmet jeg skrev, Fredelig. Den konverterer tegn for å xml sikkert, men ikke helt slik jeg vil. En kjapp replace i MySQL fikser det. Skal se på det senere.

    Jeg har fått relativt gode backuprutiner etterhvert, André. Er ikke så nøye på programmer og slikt (det meste jobbrelatert er ikke på egen pc), men tar jevnlig backup av bilder, mp3 og video ved hjelp av SyncToy. Genialt lite program. Spesielt til å komme fra Microsoft.

  7. Gravatar
    XmasB Says:

    Da skulle alt være i orden. Har tatt en opprydding på tegnsett ved hjelp av noen spørringer av denne typen:

    update wp_xmasb_quotes
    set quote = replace(quote, "'","’")

    Store/små bokstaver og slikt får jeg heller ta siden, Grim. Med over 14000 sitater er det neppe noen som reagerer på at to er like (noe jeg ikke tror det er. Innstikket sjekker nemlig etter duplikater også). Du kan jo trykke på refresh knappen til du finner det? :)

  8. Gravatar
    Grim Says:

    Ikke frist meg! Python+BeautifulSoup og det tar meg to minutter.

  9. Gravatar
    XmasB Says:

    Hehe, jeg vet du klarer det, Grim. :)

    Hey, BeautifulSoup så litt morsomt ut!

    You didn’t write that awful page. You’re just trying to get some data out of it. Right now, you don’t really care what HTML is supposed to look like.

    Neither does this parser.

Leave a Reply