Avatar billede maron Nybegynder
13. maj 2007 - 11:49 Der er 12 kommentarer og
1 løsning

ASP IN funktion

Nogen der har et bud her?
Jeg har et felt i min database med flere værdier som:

bjarne, kaj, heine

Jeg har prøvet noget i stil med:
If rs("navne") IN ('kaj') then
response.write ("Hej Kaj")
end if

Men ingen resultat, hvad gør jeg forkert her?
Avatar billede keysersoze Ekspert
13. maj 2007 - 12:20 #1
Der findes ikke en IN funktion i ASP - det er SQL-syntaks.

Du kan fx sige;

If instr(rs("navne"),"kaj") > 0 Then

Men så risikerer du også at fange fx "kajsen" så det skal nok udbygges lidt hvis det er, men umiddelbart lyder det som om du måske har valgt en forkert database-opbygning hvis indholdet af et felt kan se sådan ud. Hvad er formået?
Avatar billede maron Nybegynder
13. maj 2007 - 12:40 #2
Hm. ja det var ikke så godt.
Kan man så ikke tjekke det på en anden måde med ASP? Altså navnene er jo adskilt i databasen med et komma, kan man ikke ud fra det lave en mere præcis sammenligning?
Avatar billede maron Nybegynder
13. maj 2007 - 12:43 #3
Eller hvordan med:


If instr(rs("navne"),"kaj") = "kaj" Then
Avatar billede keysersoze Ekspert
13. maj 2007 - 13:45 #4
nej - ikke uden en masse ekstra kode, fx omdanne det til et array

tmp = split(rs("navne"),", ")
for t = 0 to ubound(tmp)
  if tmp(t) = "kaj" then
    'noget
  end if
next

men igen - jeg ved selvfølgelig ikke hvad det er du laver, men sikker på at den struktur du arbejder med er den rigtige rent databasemæssigt?
Avatar billede michael_stim Ekspert
13. maj 2007 - 13:51 #5
keysersoze>>"men igen - jeg ved selvfølgelig ikke hvad det er du laver, men sikker på at den struktur du arbejder med er den rigtige rent databasemæssigt?"

Åbenbart ikke når man nu er nød til at søge i stringen ;o)

I oracle kan man søge direkte i SQL'en, men det tager tid. Ved ikke hvordan det er med Access eller MSSQL (hvis du bruger en af dem).
Avatar billede michael_stim Ekspert
13. maj 2007 - 13:53 #6
PS.
Ville nok, som keysersoze siger, overveje at kigge min struktur igennem. Det hjælper dig i fremtiden også, så du ikke støder ind i lignende problemer.
Avatar billede maron Nybegynder
13. maj 2007 - 13:55 #7
Database strukturen skulle have været en anden, men nu har jeg ændre alle navne til tal værdier og så brugt forslaget fra keyserzone.- det virker fint.

If instr(rs("navne"),"1") > 0 Then
Avatar billede keysersoze Ekspert
13. maj 2007 - 14:33 #8
problemet - stadig - men instr er, at som din database er struktureret nu vil du med dit eksempel også finde 10, 100, 901, 516 osv og så er du ikke nået meget videre.

Så skal du i stedet lave indholdet i dit felt fx sådan; ¤bjarne¤,¤kaj¤,¤heine¤ for så kan din instr se sådan ud;

If instr(rs("navne"),"¤kaj¤") > 0 Then

hvilket vil resultere i at kajsen ikke vil blive fundet - til gengæld gør det også feltet næsten ubrugeligt til alt andet.

michael_stim >> du kan sagtens søge i SQL i formentlig alle andre databaser - men det vil ikke kunne udskrive noget specifikt på skærmen som i eksemplet fra spørgsmålet. Så skal man i stedet kun selecte det nødvendige ud men der vil problematikken være den samme som instr.
Avatar billede maron Nybegynder
13. maj 2007 - 15:02 #9
keyserzone >> meget fint, godt ide med:
If instr(rs("navne"),"¤kaj¤") > 0 Then

Men nu jeg jeg problemer med min IN i MySql....
Mener det skal skrives sådan:

SQL = SQL & " AND navn IN '" & rs("navne")& "'"
Avatar billede keysersoze Ekspert
13. maj 2007 - 15:18 #10
SQL = SQL & " AND navn IN (" & rs("navne") & ")"

vil dog stadig ikke virke da hver eneste navn skal have ' omkring sig - så måske

SQL = SQL & " AND navn IN (" & Replace(rs("navne"),"¤","'") & ")"

såfremt du kører med ¤ løsningen

... sammenligning på tekst på denne måde er bare ikke super hensigtsmæssigt.
Avatar billede maron Nybegynder
13. maj 2007 - 15:28 #11
Nu siger du hvert navn skal have ' omkring sig.
Jeg anvender formularfelter med flere valg, så hvis der vælges 3 navne, skrives de ind i databasen, men der burde myqsl måske automatisk sætte ' omkring?
Avatar billede keysersoze Ekspert
13. maj 2007 - 15:55 #12
intet sker automatisk i sql - men nu hentydede jeg til din sammenligning (altså IN), hvor du lige så vel som fx

navn = 'test'

også skal have det tilsvarende i IN

navn IN ('test', 'kaj')
Avatar billede maron Nybegynder
13. maj 2007 - 16:40 #13
Nu er alle navne sat op med 'kaj','peter' osv. og det virker fint.
Så nu kan jeg komme videre med sagerne, tak for hjælpen :-)
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