Arkiv

Poster tagget med ‘Duplikater’

Slette duplikater fra MySQL

27 mai 2008

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 14000 ((Fjorten tusen, ja)) 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 samlingen ((Jeg kunne selvfølgelig sjekket for duplikater når jeg legger sitatene inn, men det gjør jeg altså ikke.)). 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 kommando ((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)). 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.

Geek , , , ,