Avatar billede tbm_iceman Nybegynder
02. august 2004 - 17:36 Der er 7 kommentarer og
1 løsning

Antal instr?

Hej eksperter.

I min DB har jeg et felt der hedder [LIST] det indeholder en komma separeret streng... ala det her:

1, 6, 4, 86, 34, 123, 5

det jeg gerne vil er at lave en ORDER BY [LIST] hvor den selv finder ud af hvem der har flest i sin liste. Jeg har lavet en midlertidig løsning med LEN([LIST]) men det er ikke godt nok da der her kan blive taget fejl når tallene ikke er på lige mange karakterer!

Jeg havde forestillet mig noget med InStr og så tælle alle kommaer +1 og så lave et select på det, men er ikke helt med på hvordan det skal laves.
Avatar billede arne_v Ekspert
02. august 2004 - 17:44 #1
Forkert database design.

I.s.f.:

t1
id  x  list
1  a  1,2
2  b  1,2,3

bør du have:

t
id  x
1    a
2    b

list
id  n
1    1
1    2
2    1
2    2
2    3

Så kan du nemt lave:

SELECT id,COUNT(n) AS cnt FROM list GROUP BY id ORDER BY CNT

Det er den rigtige database måde at gøre det på. Og det nemmeste.
Avatar billede tbm_iceman Nybegynder
02. august 2004 - 17:55 #2
hmm... har det sådant her lige nu;

Users:
id - list
1 - 1,2,3,4,6

List:
id - navn
1 - bla1
2 - bla2

men det du skriver der ville da gøre det mere kompliceret, eller er det bare mig?
Avatar billede arne_v Ekspert
02. august 2004 - 17:59 #3
Mit forslag vil omformet til dine data hedde:

Users:
id - list
1 - 1
1 - 2
1 - 3
1 - 4
1 - 6

List:
id - navn
1 - bla1
2 - bla2

Det er en grund regel i relationelle databaser at der kun er en enkelt værdi
i et felt.

Og det er meget nemmere.
Avatar billede arne_v Ekspert
02. august 2004 - 18:00 #4
SELECT id,COUNT(list) AS cnt FROM users GROUP BY id ORDER BY cnt DESC
Avatar billede tbm_iceman Nybegynder
02. august 2004 - 18:04 #5
hmm, skulle jeg nok have lavet inden jeg fix en database med alt for mange users og lister i... har omkring 4500 lister og 600 users... :/
det var bare så dejlig let med det på den måde for så kunne jeg lave WHERE id IN (LIST) selvom det heller ikke er den SQL kommando vi er lige glade for alle sammen...
men burde jeg i denne situation ikke bare lave en 3 relations tabel... med userid og listid, istedet for at skulle lave hele mit design om, plus en stor del af siden?
Avatar billede arne_v Ekspert
02. august 2004 - 19:02 #6
Du kan også lave:

... WHERE id IN (SELECT id FROM ...)

Jeg kan godt se problemet når du nu har data og logik til den struktur.

Men hvis det database/applikation skal udvikles fremover, så synes jeg alligevel
at du skal lave den om nu.

Fordi du vil ikke få andet end problemer hele tiden med den komma separerede liste.
Avatar billede arne_v Ekspert
15. august 2004 - 13:41 #7
OK ?
Avatar billede tbm_iceman Nybegynder
17. august 2004 - 16:40 #8
Yeps det er ok! ... Har ikke skiftet design endnu. Men gør det nok snart. Da jeg er oppe på ca. 1500 brugerer nu og ca 6000 lister...
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
Computerworld tilbyder specialiserede kurser i database-management

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