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 []