Avatar billede hairboy1234 Nybegynder
26. juli 2003 - 00:53 Der er 20 kommentarer og
1 løsning

Fjerne Duplikationer

Jeg har et udsnit af en mysql tabel der ser således ud:

http://hairboy.adsl.dk/Image1.gif

Nu vil jeg godt have et script der gennemgår hver row og fjerner de tal (adskildt af mellemrum) der er nævnt to gange.

Fx i tredie felt og flere derned af er tallet 34195 nævnt to gange. Disse skal alle fjernes.

Bemærk: Det er vigtigt at scriptet ikke blot fjerner alle fx 1-taller. Den skal respektere mellemrummet!

Håber på lidt hjælp for min egen løsning er meget besværlig!
Avatar billede tipsen Nybegynder
26. juli 2003 - 00:56 #1
Tror ikke umiddelbart der er en pæn sql-løsning til dette - uden at kende problemstillingen vil jeg gætte på at du når længere ved at ændre strukturen af din db, så du ikke er tvunget til at gemme data på den (håbløse) måde.
Avatar billede repsac Nybegynder
26. juli 2003 - 00:58 #2
Hvor mange data har du (antal rækker)?
Avatar billede detox Nybegynder
26. juli 2003 - 00:58 #3
Kan du ikke bruge "GROUP BY uidaccess" i din query?
Avatar billede detox Nybegynder
26. juli 2003 - 00:59 #4
Hmmm, jeg har måske misforstået spørgsmålet.
Avatar billede hairboy1234 Nybegynder
26. juli 2003 - 01:00 #5
Hehe ja den er håbløs men nu har jeg programmeret en stor del udfra denne løsning, så hvis du kan finde på en lappeløsning til dette vil jeg være meget taknemlig.
Avatar billede hairboy1234 Nybegynder
26. juli 2003 - 01:01 #6
Kun 15
Avatar billede hairboy1234 Nybegynder
26. juli 2003 - 01:03 #7
Den løsning jeg selv har fundet på er meget besværlig. Nemlig ved at konvertere hver talrække til arrays og herefter køre flere løkker inden i hinanden for at checke hvilke tal der er flere gange...
Avatar billede repsac Nybegynder
26. juli 2003 - 01:03 #8
hvis der er få data vil jeg hapse alt ud i php og kaste alle delene i et array, og samle det hele i ét stort array og bruge array_unique. Hvis der er mange data vil jeg nok foretrække at "flade data'ene ud", så hvert tal har sin egen række, og derefter lade mysql arbejde lidt med noget unique-tamtam... tror jeg...
Avatar billede repsac Nybegynder
26. juli 2003 - 01:04 #9
du kan da sætte alle dine arrays efterhinanden i ét "langt" array... så skulle array_unique kunne klare resten... :)

(men array_unique har jeg mistænkt for at være langsom; ved ikke rigtig hvorfor)
Avatar billede repsac Nybegynder
26. juli 2003 - 01:06 #10
se www.php.net/array --> "See Also" (her er alle de rare funktioner :))
Avatar billede hairboy1234 Nybegynder
26. juli 2003 - 01:06 #11
Der bliver ikke så mange tal. Måske 20 rows med op til 20 tal i hver.

Men bemærk at den skal kontrolere hver row enkelvis. Det samme tal må godt optræde i hver row bare ikke flere gange i samme.
Avatar billede hairboy1234 Nybegynder
26. juli 2003 - 01:09 #12
ok repsac hvis du fx skal kontrolere $rows[uidacces] der indeholder (1 34195 728 34195) hvordan vil du så gøre det med array_unique? Så kan jeg nok finde ud af resten selv :)
Avatar billede repsac Nybegynder
26. juli 2003 - 01:10 #13
$tam = explode (' ', $rows['uidacces']);
$uniquetam = array_unique($tam);

Nu vil $uniquetam være et array, hvor hvert tal max. optræder én gang.
Avatar billede hairboy1234 Nybegynder
26. juli 2003 - 01:13 #14
Example 2. array_unique() and types

<?php
$input = array (4,"4","3",4,3,"3");
$result = array_unique ($input);
var_dump($result);
?>

Man skal ikke bruge det der var_dump($result); -ting?

Hvordan får du så array'et ind i tabellen igen? Skal det så laves om til en streng igen?
Avatar billede hairboy1234 Nybegynder
26. juli 2003 - 01:14 #15
Husk også lige at skriv som svar også så jeg kan smide nogle point i hovedet på din :)
Avatar billede hairboy1234 Nybegynder
26. juli 2003 - 01:15 #16
dårligt sproget
Avatar billede repsac Nybegynder
26. juli 2003 - 01:17 #17
$tam = explode (' ', $rows['uidacces']);
$uniquetam = array_unique($tam);
$uidacces_to_insert = implode(' ', $uniquetam);

opdatér så rækken i mysql med $uidacces_to_insert i feltet uidacces...

... det er mit bedste umiddelbare bud i hvert fald :)
Avatar billede hairboy1234 Nybegynder
26. juli 2003 - 01:18 #18
perfect! så mangler jeg bare et svar
Avatar billede repsac Nybegynder
26. juli 2003 - 01:20 #19
Når nogen afsætter et urealistisk stort antal points af til et spørgsmål, gidder jeg slet ikke have dem. Du _kan_ være én af de brugere der blot opretter et nyt nick i morgen, så der er jo "tomme" point... behold dem.
Avatar billede hairboy1234 Nybegynder
26. juli 2003 - 01:22 #20
Det gør jeg ikke. Jeg ville ellers godt have givet dig noget som tak for hjælpen.

Men du skal ihvertfald have et stort tak!
Avatar billede repsac Nybegynder
26. juli 2003 - 01:27 #21
NP. en taknemmelig og hjulpet person er tilstrækkeligt til at gøre mig lidt glad ;)
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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