webForumDet fria alternativet

Ta bort dubletter

Databaser & SQL

12 svar · 640 visningar · startad av oskars

Medlem sedan nov. 20051 317 inlägg
Frågan#1

Hej på er!

Ja, jag har sökt på forumet... och har hittat flertalet trådar om hur man tar bort dubletter... Men behöver ett eget exempel för att förstår :/

Jag har en tabell (minTabell) som innehåller tusentals poster.

Jag vill:

  • Ta bort alla dubletter: Där fälten strNamn och strEfternamn är likadana i dom båda posterna (ska kunna gå att ändra om jag behöver dock).
  • Och detta vill jag enbart göra t.ex på dom där ID > 100
  • Det vore även bra om man först kunde få en lista över dom som är dubletter innan man tar bort dom... så man får lite koll....

Vore så tacksam för hjälp för jag har lite panik här :(

Jag kör MySQL!

:stud

Oskar

Medlem sedan juni 20019 519 inlägg
#2

Finns särket ett bättre sätt i SQL direkt men jag hade kunnat tänka mig:
Gör en SELECT sats där du sortera efter strNamn och StrEfternamn där id > 100
och sedan använder ASP/PHP/whatever att göra en deletesats OM förra StrNamn och StrEfternamn stämmer överens med nuvarande för- och efternamn.

Medlem sedan nov. 20051 317 inlägg
#3

Hm, jo så kan man ju göra! Eller nej det går ju inte.... för dubletterna behöer ju inte ligga precis under varandra!

hur menar du med "i SQL direkt"? Jag kör EMS MySQL Manager!

Medlem sedan juni 20019 519 inlägg
#4

vad jag menar är att man kan särket lösa problemet direkt med hjälp av en SQL sträng / i programvaran. Men detta har jag ingen koll på.

Medlem sedan nov. 20051 317 inlägg
#5

Okej! Inte jag heller! :birp

Medlem sedan juni 200032 967 inlägg
#6

Hm, jo så kan man ju göra! Eller nej det går ju inte.... för dubletterna behöer ju inte ligga precis under varandra!

Det kan de väl göra? Det beror ju på hur du sorterar i order by i din sql-fråga...

Medlem sedan nov. 20051 317 inlägg
#7

@nders... .... ... du har rätt... . .... är det här bästa lösningen tror du?

Men hur kollar jag om "den förra posten" är lika med den nya posten?

Förstår itne hur jag ska spara dom i olika variablar... eller.. kanske är för stressad för att tänk klart

Medlem sedan juni 200032 967 inlägg
#8

det går absolut att lösa med ren sql, annars kan man ju om man vill lösa det i asp göra det, genom att jämföra lite variabler. typ:

sFirstName = ""
sLastName = ""
while not foo.eof
     if foo("firstname") = sFirstName and foo("lastname") = sLastName then
           ' samma som förra, för böveln, radera denna!
     end if
     sFirstName = foo("firstname")
     sLastName = foo("lastname")
     ...
     foo.movenext
wend

enkelt beskrivet...

Medlem sedan nov. 20051 317 inlägg
#9

Du @nders! Tack!!!!

jävlar vad bra!

nu har jag gjort så att där du skrivit "för bövelen" så skriver jag istället ut dubletten... då kan man väl säga att scriptet skriver ut dubletten, medan det samtidigt finns ett "orginal" som inte visas i listan?

Medlem sedan juni 20019 519 inlägg
#10

precis...

sFirstName = ""
sLastName = ""
while not foo.eof
     if foo("firstname") = sFirstName and foo("lastname") = sLastName then
       response.write foo("firstname") & " " foo("lastname")  & " idnummer <strong>" & foo("id") "</strong> är en dublett"
       'SQL För att radera dubellet(rekomendera ID nummer då om du använder dig av firstname eller lastname så tar du bort alla poster ;)
     end if
     sFirstName = foo("firstname")
     sLastName = foo("lastname")
     ...
     foo.movenext
wend
Medlem sedan nov. 20051 317 inlägg
#11

voigtann1 skrev:

precis...

sFirstName = ""
sLastName = ""
while not foo.eof
     if foo("firstname") = sFirstName and foo("lastname") = sLastName then
       response.write foo("firstname") & " " foo("lastname")  & " är en dublett"
       'SQL För att radera dubellet(rekomendera ID nummer då om du använder dig av firstname eller lastname så tar du bort alla poster ;)
     end if
     sFirstName = foo("firstname")
     sLastName = foo("lastname")
     ...
     foo.movenext
wend

"rekomendera ID nummer då om du använder dig av firstname eller lastname så tar du bort alla poster ;)"

Menar du att jag ska DELETE FROM minTabell WHERE ID = RecSet("ID") eller något annat? :D

Medlem sedan juni 20019 519 inlägg
#12

precis.

Medlem sedan nov. 20051 317 inlägg
#13

*dansar* Ni är så snälla!

280 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
152 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
152 ms — ändringar (db)