Avatar billede medions Nybegynder
22. maj 2002 - 00:24 Der er 23 kommentarer og
2 løsninger

Vedr. Kommasesparering!

Jeg har et felt i min database, som indeholder fx. følgende:
1,2,5,6
Dette er altsammen kategorier for jokes, som skal kunne vises hver for sig... dette felt, ville så stå ud for en joke som både skal kunne vises i kategori 1,2,5 og 6. Hvordan sortere jeg det i SQL?
altså sådan så den vælger alle de jokes hvis felt indeholder fx et 5 tal
Avatar billede tmceu Praktikant
22. maj 2002 - 00:33 #1
Det er en lidt problematisk måde at gemme dine kategorier på, men du kan eks. bruge LIKE funktionen, men den kan dog godt give lidt problemer ift. eks. 15, 25, 55 o.s.v.. Men hvis du eks. anvender WHERE X LIKE '%,5,%', bør den være rimelig sikker. Ved ikke om det var det du mente ?
Avatar billede gryn Nybegynder
22. maj 2002 - 00:36 #2
Det ville være bedre at lave databasen, så du havde en true/false kolonne pr. kategori.
Avatar billede medions Nybegynder
22. maj 2002 - 00:39 #3
tmceu> Har prøvet med LIKE, det virkede ikke! -tror det er noget med IN man skal bruge!

gryn> Hvis vi nu siger at jeg ik' ved hvor mange kategorier der er, så er den lidt problematisk din måde! -Det er nemlig sådan at man kan oprette flere kategorier gennem et administratorsystem!

Har i andre måder det evt. kunne gøres på?
//>Rune
Avatar billede gryn Nybegynder
22. maj 2002 - 00:39 #4
Ellers skulle SQL'en nok se sådan ud:
WHERE X LIKE '%5,%'
Og så skulle feltet også indeholde et komma efter det sidste tal i rækken. altså "1,2,5,6,"

er du med?
Avatar billede medions Nybegynder
22. maj 2002 - 00:43 #5
gryn> hvad nu hvis det var det sidste tal i rækken?
-det med LIKE dúr ikke!
//>Rune
Avatar billede gryn Nybegynder
22. maj 2002 - 00:48 #6
Hvad mener du med: "hvad nu hvis det var det sidste tal i rækken? "?

Det med LIKE skal dú!
Avatar billede medions Nybegynder
22. maj 2002 - 00:51 #7
hvis nu det var det sidste tal i række jeg skulle trække ud... så kunne jeg jo ik' bruge WHERE X LIKE '%5,%'

//>Rune
Avatar billede tmceu Praktikant
22. maj 2002 - 00:52 #8
IN var også min første indskydelse, men den "vender forkert" ift. dit behov. IN anvendes til at se om en værdi i et felt matcher en liste af værdier, eks.

SELECT * FROM Table WHERE Felt IN(1, 2, 3)

Du har ret mht. forslaget om x antal kategori felter, den holder ikke i en dynamisk verden. Jeg ville i stedet tilføje en ekstra kryds-tabel mellem dine jokes og kategorierne (mange-mange).

Jokes og kategorier relaterer sig begge 1-mange til reftabel som indeholder jokeid + kategoriid.
Avatar billede gryn Nybegynder
22. maj 2002 - 00:55 #9
Det er derfor du skulle skrive komma til sidst i rækken af kategorier. "1,2,5,6,"
Avatar billede medions Nybegynder
22. maj 2002 - 00:55 #10
tmceu> jeg forstår ik' rigtig hvad du mener, kan du ik' prøve at skære det lidt mere ud?

//>Rune
Avatar billede medions Nybegynder
22. maj 2002 - 00:56 #11
gryn> *G*
//>Rune
Avatar billede medions Nybegynder
22. maj 2002 - 01:01 #12
gryn> hvad så hvis der kun er én kategori valgt i feltet... -vil du så oxo ha' at jeg skulle skrive fx. 6, ?

//>Rune
Avatar billede gryn Nybegynder
22. maj 2002 - 01:02 #13
ja
Avatar billede tmceu Praktikant
22. maj 2002 - 01:05 #14
OK, lad os prøve. Vi forudsætter at du har flg. simplificerede data

Jokes (ID)
----------
1
2
3

Kategori (ID)
-------------
A
B
C

reftabel (Joke ID, Kategori ID)
-------------------------------
1, A
1, B
2, C
3, B
3, C

Nu kan du se, at Joke 1 er i kategorierne A + B, 2 i C, mens 3 er i B + C

Giver det mening ?
Avatar billede medions Nybegynder
22. maj 2002 - 01:08 #15
ja, det giver lidt mere...! - men det skal jo oxo genereres dynamisk! Hvordan det?

//>Rune
Avatar billede tmceu Praktikant
22. maj 2002 - 01:17 #16
Når du indtaster en joke, får du eks dine kategorier i en komma separeret streng A,B, C,D

strKategorier = replace(Request.Form("Kategorier"), " ", "")
arrKategorier = Split(strKategorier, ",")

for i = 0 to UBound(arrKategorier)
strSQL = strSQL & "INSERT INTO RefTabel VALUES(" & Request.Form("JokeID") & ", " & arrKategorier(i) & ");"
next

Dette giver dig nu et SQL statement, der indsætter hele din krydsreference i tabellen.
Avatar billede medions Nybegynder
22. maj 2002 - 01:20 #17
tmceu> Okay, men lad os nu sige at jeg skal bruge alle jokesne som er tilhænger af kategoriID 3, hvordan vil du så gøre det?

//>Rune
Avatar billede tmceu Praktikant
22. maj 2002 - 01:21 #18
Hvis du så eks. vil vise alle dine kategorier med tilhørende jokes, bruger du så noget i stil med dette:

SELECT KategoriID, R.JokeID, JokeTekst FROM RefTabel R INNER JOIN Jokes J ON R.JokeID = J.ID ORDER BY KategoriID, R.JokeID
Avatar billede tmceu Praktikant
22. maj 2002 - 01:22 #19
SELECT KategoriID, R.JokeID, JokeTekst FROM RefTabel R INNER JOIN Jokes J ON R.JokeID = J.ID WHERE KaegoriID = 3 ORDER BY R.JokeID
Avatar billede medions Nybegynder
22. maj 2002 - 01:23 #20
tmceu> okay.. jeg vil lige se på det i morgen, er for træt til det nu! -Indtilvidere tak for hjælpen! Jeg giver lige besked i morgen om jeg har fået det til at virke!

//>Rune
Avatar billede tmceu Praktikant
22. maj 2002 - 01:27 #21
Helt ok. Det er nemmere at vise end forklare, især på denne tid af døgnet :-)
Avatar billede medions Nybegynder
22. maj 2002 - 01:28 #22
:-)

//>Rune
Avatar billede medions Nybegynder
23. maj 2002 - 00:21 #23
Når fuck det.. jeg gider ik' mere! I skal ha' tak for hjælpen!!! Jeg fik det sq aldrig til at virke, jeg må se efter en anden metode!

//>Rune
Avatar billede tmceu Praktikant
23. maj 2002 - 01:32 #24
Hvis det er en access database og du kan smide et link til .mdb filen, skal jeg gerne kigge på den. Du er meget tæt på at få det til at virke, så det ville være ærgeligt at give op nu :-)

Alternativt, hvilken database anvender du ? Jeg kan også lave et simpelt eksempel i eks. MySQL el. SQL Server og maile til dig ?
Avatar billede medions Nybegynder
23. maj 2002 - 14:31 #25
tmceu> Nej tak.... Ellers tak, det er flinkt af dig!!! -Men når jeg ser mig træt i den kode, og ikke selv kan finde ud af den 99% så vil jeg ik' ha' med den at gøre...! -Jeg tror jeg finde ud af en XML løsning! -det er jeg ihvertfald igang med nu!

Du skal ha' mange gange tak for din hjælp!
//>Rune
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