Avatar billede bobbedude Nybegynder
27. november 2006 - 11:46 Der er 16 kommentarer og
1 løsning

Loop måske split

jeg har et loop som laver en variabel

MinVariabel = "1, 2, 3, 8, 10"

nu skal jeg så lave endnu et loop hvor jeg skal hente disse ud

SQL = "select * from user where team = MinVariabel"
Men det kommer jo ikke til at virke, hvor dan er det lige lettest at lave dette?
Avatar billede keysersoze Ekspert
27. november 2006 - 11:49 #1
SQL = "select * from user where team IN (" & MinVariabel & ")"
Avatar billede bobbedude Nybegynder
27. november 2006 - 11:53 #2
Damn glemte at User kan være med i flere så teamID kunne se sådan ud
1, 5, 7, 8

så derfor virker SQL = "select * from user where team IN (" & MinVariabel & ")" ikke
Avatar billede bobbedude Nybegynder
27. november 2006 - 11:55 #3
nej stop jeg kager jo rundt i det.

jeg looper først nogle enklte IDer ud

1
3
45
5
6

her efter skal jeg så finde de bruger der har disse IDer

TeamID = 2, 5, 6
TeamID = 1, 4, 2
Avatar billede bobbedude Nybegynder
27. november 2006 - 11:57 #4
TeamID i users er af typen tekst
Avatar billede keysersoze Ekspert
27. november 2006 - 12:01 #5
hmm - så vil jeg umiddelbart mene at du får det bedste resultat ved at flytte teamid ud i en join-tabel;

join_user_team
USER_ID
TEAM_ID

så får du betydelig lettere ved at arbejde med dataene.
Avatar billede bobbedude Nybegynder
27. november 2006 - 12:04 #6
keysersoze>> gider du uddybe det en smule jeg er ikke helt med endnu
Avatar billede keysersoze Ekspert
27. november 2006 - 12:07 #7
først lige et spm - når du snakker om "teamID" og i din sql skriver "team" er det så det samme eller?
Avatar billede ldanielsen Nybegynder
27. november 2006 - 12:11 #8
Hvis en User kan være i flere teams skal du lave en mange-til-mange relation. Det gør du med en ekstra tabel:

User
----
UserID
Navn
m.m.

Team
----
TeamID
Navn
m.m.

TeamUser
--------
TeamUserID
UserID
TeamID
m.m.

Så hvis du har en User med UserID 34, og han skal være i Team med TeamID 3 og 14, så laver du 2 poster i TeamUser: En med UserID 34 og TeamID 3, og en med UserID 34 og TeamID 14.

Skal du vide hvilke teams user 34 er med i siger du

SELECT TeamID FROM User INNER JOIN TeamUser ON User.UserID = TeamUser.UserID
WHERE User.UserID = 34

Skal du vide hvilke users der er med i team 14 siger du:
SELECT UserID FROM TeamUser INNER JOIN Team ON TeamUser.TeamID = Team.TeamID
WHERE Team.TeamID = 14

De med at lave felter med kommaseparerede ID'er har vi vist alle været inde på, men det er besværligt, og meget ressourcekrævende. Den "rigtige" måde virker måske kompliceret i første omgang, men det bliver meget hurtigt en vane, og din kode bliver mere ren.

Man siger at kompliceringsgraden af et projekt er konstant, du kan blot vælge om det komplicerede skal være i databasen, eller i den kode der betjener sig af databasen.
Avatar billede ldanielsen Nybegynder
27. november 2006 - 12:11 #9
Det var så det keysersoze sagde ... :o)
Avatar billede bobbedude Nybegynder
27. november 2006 - 12:15 #10
oki jeg tror jeg er med, det giver bare én del mere arbejde når man skal tilføje og slette men jeg tester det lige ud.
Avatar billede bobbedude Nybegynder
27. november 2006 - 12:28 #11
Tak for svarene jeg brugte dog en anden løsning:


If TeamID <> "" Then
            TheTeamID = split(TeamIDX,", ")
        for i=0 to Ubound(TheTeamID)
           
            If Round(Request.Querystring("Team")) = Round(TheTeamID(i)) Then
                    response.write rs("Navn") & "<br>"
            Else
            End If
           
        next
End If
   

jeg kunne simpelhen ikke lige overskue at skulle lave det hele om.
Men det er sikkert at næste gang jeg skal lave noget magen til vil jeg bruge denne løsning.

Smider i ikke lige et svar ?
Avatar billede ldanielsen Nybegynder
27. november 2006 - 12:29 #12
Nej, der tager du fejl, det giver ikke mere arbejde. Korrekt, hvis du skal slette en kunde skal du (pseudokode):

DELETE User med UserID 34
DELETE TeamUser med UserID 34

Men når du skal tilmelde en user til et team vil du nu skulle:
UPDATE User SET TeamID = TeamID + ', ' + 14 ...

Med min struktur skal du bare:
INSERT INTO TeamUser User 34 Team 14

- og det er meget mere enkelt. For ikke at tale om når data skal hentes, som jeg beskrev det.

Desuden er det vejen frem som programmør. En af de gode kvalifikationer på dit CV er "Databasedesigner", find en god bog om det.
Avatar billede keysersoze Ekspert
27. november 2006 - 12:39 #13
hold da op hvor er jeg langsom - lige mit b7;

korrekt - det giver en smule mere arbejde under oprettelse og sletning, men det er MÅDEN at arbejde med databaser på. Set i forhold til det arbejde man sparer når man skal arbejde med dataene så er det også småting - alene den kode du dér har lavet fylder vel næsten mere end hvad der kræves af opret/slet... for ikke at tænke på server-arbejdet.

Hvis ikke du allerede har en masse sider og en masse data ville jeg helt klart foretrække at lave strukturen rigtig :)
Avatar billede keysersoze Ekspert
10. december 2006 - 02:25 #14
kommet videre?
Avatar billede bobbedude Nybegynder
10. december 2006 - 20:38 #15
yes jeg har fået det lavet men ikke som i beskrev jeg gjorde det med en split funktion, men næste gang jeg skal lave noget ligende vil jeg bruge jeres forslag så smider i ikke lige et svar så deler jeg point mellem jer.
Avatar billede keysersoze Ekspert
10. december 2006 - 21:01 #16
svar :)
Avatar billede ldanielsen Nybegynder
11. december 2006 - 11:31 #17
Nej tak
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
Kurser inden for grundlæggende programmering

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