/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
opsplitte kommaseparerede data i felt?
Fra : Otto


Dato : 11-02-07 11:22

hej
Jeg har en dropdownliste (fra DB) hvor bruger kan vælge
flere flere data ( MULTIPLE). Det giver anledning til et par spørgsmål,som
jeg meget gerne vil have hjælp med:

#1) kan man 'styre' at en bruger ikke vælger mere end f.eks max 3 - af feks
10 mulige dataværdier i dropdownlisten?

#2) Værdierne indsættes som kommaseparerede data i
samme felt i databasen. Det fungerer fint - men problemet er nu : Hvordan
kan jeg nu søge og sortere på disse data.
Jeg har indsat et eksempel på hvordan det pågælde felt i DB ser ud med
data.(ved ikke om det vises i NG)
bruger_evaluering Q4
Almen, Reformkurser, Studieplanen
Studieplanen
Lærerteam, Projektarbejdet


på forhånd tak - Otto




 
 
Jens Gyldenkærne Cla~ (11-02-2007)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 11-02-07 14:54

Otto skrev:

> #1) kan man 'styre' at en bruger ikke vælger mere end f.eks
> max 3 - af feks 10 mulige dataværdier i dropdownlisten?

Ja. På serversiden - hvor asp-koden kører - kan du tjekke antallet
af valgte elementer ved at splitte den streng du får ind (jeg kan
på stående fod ikke huske om man modtager en simpel kommasepareret
streng eller om det er en form for samling, men i begge tilfælde
kan man teste hvor mange elementer der er modtaget - sørg blot for
at de submittede værdier ikke indeholder kommaer).


> #2) Værdierne indsættes som kommaseparerede data i
> samme felt i databasen.

Flerværdifelter er noget snavs - som dit tillægsspørgsmål ganske
nydeligt demonstrerer. I databasesammenhæng er grundreglen at man
gemmer én værdi i et felt (eller slet ingen). Hvis du har flere
værdier, skal du oprette en relation så du kan gemme værdierne som
separate poster.

Eksempel:

I en persondatabase skal man registrere navn, adresse og hobbyer.
Følgende personer skal lægges ind:
- Hans Jensen, Rosevej 42, skak, bridge og ludo
- Ida Hansen, Skovvejen 17, ridning
- Brian Larsen, Svinget 2, ludo og frimærker

Implementering 1 (dårlig):
tbl
Navn, Adresse, Hobby
"Hans Jensen", "Rosevej 42", "skak, bridge, ludo"
"Ida Hansen", "Skovvejen 17", "ridning"
"Brian Larsen", "Svinget 2", "ludo, frimærker"

Implementering 2 (dårlig):
Navn, Adresse, Hobby1, Hobby2, Hobby3
"Hans Jensen", "Rosevej 42", "skak", "bridge", "ludo"
"Ida Hansen", "Skovvejen 17", "ridning", "", ""
"Brian Larsen", "Svinget 2", "ludo", "frimærker", ""

Implementering 3 (korrekt)
tblNavn:
Navn, Adresse
"Hans Jensen", "Rosevej 42"
"Ida Hansen", "Skovvejen 17"
"Brian Larsen", "Svinget 2"

tblNavnHobby
"Hans Jensen", "skak"
"Hans Jensen", "skak"
"Hans Jensen", "skak"
"Ida Hansen", "ridning"
"Brian Larsen", "ludo"
"Brian Larsen", "frimærker"

Problemet med 1 er at det er svært at søge og sortere efter folk
der har en bestemt hobby. Det samme problem gælder for 2, fordi man
nu ikke ved om der skal søges i 1., 2. eller 3. hobby-felt.
Opdelingen i to tabeller gør det muligt at udvælge præcis de
personer man vil have, uden at have dobbeltregistreringer.

I praksis vil man ofte have et id-nummer til at identificere
personer og hobbyer - så vil databasen være mindre følsom over for
ændringer i navne eller ændrede oplysninger til en hobby. Men
princippet er det samme - hvis der skal regisreres flerværdier,
skal der oprettes en tabel til det - og hverken lægges flere felter
eller kommaseparerede værdier ind i databasen.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Otto (12-02-2007)
Kommentar
Fra : Otto


Dato : 12-02-07 08:04


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev
> Flerværdifelter er noget snavs - som dit tillægsspørgsmål ganske nydeligt
> demonstrerer. I databasesammenhæng er grundreglen at man
gemmer én værdi i et felt (eller slet ingen). Hvis du har flere værdier,
skal du oprette en relation så du kan gemme værdierne som separate poster.

Tak for hurtig respons Jens - og ja det er noget snavs, og det duer ikke.
Men jeg forstår ikke hvordan hulen jeg får sat flerværdier fra
dropdownlisten ind i en seperat tabel. Og hvad skal være det fælles ID for
hovedtabellen og den nye tabel til
flerværdierne?
Se http://www.gymnasiereform.dk/showall.asp det drejer sig om at kunne
sortere og søge på værdierne i kollonne 'bedst' og 'værst'
Hilsen Otto



Jørn Andersen (12-02-2007)
Kommentar
Fra : Jørn Andersen


Dato : 12-02-07 10:31

On Mon, 12 Feb 2007 08:04:12 +0100, "Otto" <ottoleholt@tele.dk> wrote:

>
>"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev
>> Flerværdifelter er noget snavs - som dit tillægsspørgsmål ganske nydeligt
>> demonstrerer. I databasesammenhæng er grundreglen at man
> gemmer én værdi i et felt (eller slet ingen). Hvis du har flere værdier,
>skal du oprette en relation så du kan gemme værdierne som separate poster.
>
>Tak for hurtig respons Jens - og ja det er noget snavs, og det duer ikke.
>Men jeg forstår ikke hvordan hulen jeg får sat flerværdier fra
>dropdownlisten ind i en seperat tabel. Og hvad skal være det fælles ID for
>hovedtabellen og den nye tabel til
>flerværdierne?
>Se http://www.gymnasiereform.dk/showall.asp det drejer sig om at kunne
>sortere og søge på værdierne i kollonne 'bedst' og 'værst'

Som jeg læser det er der tale om en mange-til-mange relation - altså
hver besvarelse kan have flere "værst/bedst"-kategorier og hver
værst-bedst-kategori kan tilhøre flere besvarelser.

Jeg går ud fra, at der kan vælges (de samme) forud-definerede
kategorier for bedst og værst.

Til det formål laver man en "mellemtabel" (eller i dette tilfælde nok
to, da kategorierne for værst og bedst er de samme)

Tabllerne bliver så:
tblBesvarelse
-------------
BesvarId (primær nøgle)
Skole (Evt. Id fra separat table over skoler [1])
BedreArbLiv
LaereMere
osv.

tblKategori
-----------
KategoriId (primær nøgle)
Kategori
(indeholder "Lærerteam", "Tutorordning" osv)

og så dine to (næsten ens) mellemtabeller:

tblBedst
--------
BedstId (primær nøgle)
BesvarId
KategoriId

tblVaerst
--------
VaerstId (primær nøgle)
BesvarId
KategoriId

De to mellemtabeller indeholder så for hver post en kombination af en
skole/besvarelse og en kategori.

På den måde kan du nemt trække de data ud, du har brug for - fx hvor
mange skoler/besvarelser der nævner hver kategori som værst/bedst.
Eller om der er geografisk variation osv.

Hvis du skal udskrive mange-til-mange-relationer i ASP, skal du lige
tænke over, hvordan du sorterer ...

[1] Det vil fx være smart (= rigtigst) at have skole og postnr. i hver
sin tabel, da der formentlig godt kan være flere skoler med samme
postnr.

Ellers er det i øjeblikket mest et database-spørgsmål. Så hvis der
skal følges op, så får du nok bedre svar i:
dk.edb.database
eller
dk.edb.database.ms-access
- afhængigt af hvilken database, du bruger.


Good luck!

--
Jørn Andersen, Brønshøj

Danske tropper hjem fra Irak, nu!
Skriv under: www.kirkmand-initiativet.dk

Otto (12-02-2007)
Kommentar
Fra : Otto


Dato : 12-02-07 18:20

Takker Jørn mange gange for det udførlige svar - vil nu studere det
nærmere - og se om jeg kan finde ud af det ... TAK



Otto (12-02-2007)
Kommentar
Fra : Otto


Dato : 12-02-07 21:44

Hej igen- har nu google i timer , for at finde ud af hvordan jeg splitter
commaseperede værdier ( fra Multiple dropdownlist) op i 3 seperate værdier
som kan indsættes i databasen. Jeg kan ikke finde nogen nem løsning...!

Nogle her som ved hvordan det gøres..??
hilsen - Otto



Leif Neland (12-02-2007)
Kommentar
Fra : Leif Neland


Dato : 12-02-07 23:03

Otto wrote:
> Hej igen- har nu google i timer , for at finde ud af hvordan jeg
> splitter commaseperede værdier ( fra Multiple dropdownlist) op i 3
> seperate værdier som kan indsættes i databasen. Jeg kan ikke finde
> nogen nem løsning...!
> Nogle her som ved hvordan det gøres..??
> hilsen - Otto

Har du ikke fået klippet det nok ud?

jeg formoder du er kommet så langt, at du har to felter fra din formular
(udover de felter, du godt kan finde ud af )

' Værdier fra formularen: eks:
' Request.form("Navn") = "Otto Kragh"
' Request.form("Hobby") = "Riding,Politik,Sumobrydning"

' slet gamle
conn.execute("delete from hobbyer where navn='" & Request.form("Navn") & "')

' indsæt ny
aHobby = split( Request.form("Hobby"),",")
for i = lBound(aHobby) to uBound(aHobby)
conn.execute("insert into hobby (navn,hobby) values ('" &
Request.form("Navn") & "','"&aHobby[i]&"')")
next

.. . . .

Dette er princippet.
Der er ikke taget højde for sikring mod sqlinjects, og om der kun må være 3
relationer, samt at man som tidligere nævnt ikke bør sætte navn og hobby ind
i klartekst, men benytte person-id og hobby-id, der er nøgler ind i
person-tabellen og hobby-tabellen, så man kan ændre f.ex. stavning på navn
og hobby uden at relationerne brydes.

Man kan også overveje at tage de eksisternde værdier af nøglerne med, som en
hidden værdi, og så springe ovenstående sletning og indsætning over, hvis
der ikke er ændret noget.

Leif



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste