Avatar billede shjorth Nybegynder
11. august 2009 - 16:20 Der er 5 kommentarer og
1 løsning

Delete duplicate i mysql med php

Hejsa

Jeg har i min database fået en del "duplicates". F.eks:

ID: 12 USERID: 34234 AMOUNT: 34234
ID: 42 USERID: 34234 AMOUNT: 34234
ID: 152 USERID: 34234 AMOUNT: 34234

Jeg skal have slettet alle de duplicates, således at der kun er een række med det brugerid. Er der nogen der ved hvordan jeg hurtigt kan gøre dette.

Noget DELETE FROM eller noget i den dur

Mange tak
Avatar billede dmdisco Nybegynder
11. august 2009 - 16:42 #1
en metode kunne være at kopiere tabellen til en temp tabel med insert into select distinct og så tømme og smide det hele tilbage
Avatar billede shjorth Nybegynder
11. august 2009 - 17:33 #2
Jeg fandt det her:

mysql_query("SELECT ID, COUNT(*) AS total FROM members GROUP BY email")or die(mysql_error());
while blablabla {
if $row[total] > 1
    query(DELETE FROM members WHERE ID=$row[ID] LIMIT $row[total]-1)
}

Men umidlebart kan jeg ikke lige gennemskue præcis hvad der sker.. Jeg tror den gør det jeg ønsker :) ??
Avatar billede dmdisco Nybegynder
12. august 2009 - 12:27 #3
den sletter antallet af rækker minus 1 fra de resultater der giver mere end 1 række

kommer dog an på hvor mange rækker der er for så kan den godt være lidt sløv i det men burde gøre det du eftersøger.

du kan også bare køre denne funktion en gang imellem og så bruge select distinct de steder du skal bruge et unikt resultat.

men måske skulle du kigge lidt på om det ikek var nemmere at undgå at der kommer duplikater i din tabel til at starte med evt. ved at bruge en unique nøgle og en insert into on duplicate update
Avatar billede hermandsen Juniormester
12. august 2009 - 22:35 #4
$sql = "SELECT id FROM test GROUP BY userid, amount";
$rows = array(12, 19, 100, 4); // resultatet fra din forespørgsel er en liste af id'er

$sql = "DELETE FROM test WHERE id NOT IN (".implode(',',$rows).")";

Det er to queries, men det kunne desværre ikke laves i et, da du ellers ville lave både delete ud fra en subselect, hvilket MySQL ikke er glad for... :(
delete from test where id not in (select id from test group by userid, amount);
Avatar billede shjorth Nybegynder
07. oktober 2009 - 17:35 #5
Takker smider i et svar?
Avatar billede hermandsen Juniormester
08. oktober 2009 - 02:16 #6
Svarer...
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

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