Avatar billede jmc Nybegynder
13. marts 2005 - 20:34 Der er 11 kommentarer og
1 løsning

Svær SQL . hvordan gør jeg?

Kan en SQL regne ud af hvis man skrive

(or1...or2...or3...or4...) and (a or b)
at det skal være bare én af de første or og efter AND skal en af dem igen være indholdt.

Den første del styres af et tekstfield med fritekstsøgning, det næste af en dropdownselectionboks Som er med til at udvælge og indkrænse søgningen.

Håber du kan hjælpe.

Her er SQL:

strKey = request.form("inpSoeg")
       
        strSoegSql = "SELECT * FROM medlemmer WHERE " &_
        "Firma LIKE '%"&strKey&"%' " & "OR " &_
        "Adresse LIKE '%"&strKey&"%' " & "OR " &_
        "Adresse2 LIKE '%"&strKey&"%' " & "OR " &_
        "vBy LIKE '%"&strKey&"%' " & "OR " &_
        "Kontakt LIKE '%"&strKey&"%' " & "OR " &_
        "telefon LIKE '%"&strKey&"%' " & "OR " &_
        "email LIKE '%"&strKey&"%' " & "OR " &_
        "fornavn LIKE '%"&strKey&"%' " & "OR " &_
        "efternavn LIKE '%"&strKey&"%' " & "OR " &_
        "foedeaar LIKE '%"&strKey&"%' " & "OR " &_
        "uddannelse LIKE '%"&strKey&"%' " & "OR " &_
        "ansaettelse LIKE '%"&strKey&"%' " & "OR " &_
        "afdeling LIKE '%"&strKey&"%' " & "OR " &_
        "mail LIKE '%"&strKey&"%' " & "OR " &_
        "web LIKE '%"&strKey&"%' " & "OR " &_
        "tlf LIKE '%"&strKey&"%' " & "OR " &_
        "mobil LIKE '%"&strKey&"%' " & "OR " &_
        "fax LIKE '%"&strKey&"%' "
       
        'response.Write(INT(request.form("select")))
        i = INT(request.form("select"))
       
select case i
  case 1
  strSoegSql = strSoegSql & "AND medlemsnr like '30%' AND medlemsnr LIKE '40%' AND medlemsnr like '50%' AND medlemsnr like '60%' AND medlemsnr like '70%';" 
case 3
strSoegSql = strSoegSql & "AND medlemsnr like '30%';"
case 4
strSoegSql = strSoegSql & "AND medlemsnr like '40%' AND  medlemsnr like '50%';"
case 6
strSoegSql = strSoegSql & "AND medlemsnr like '60%' AND  medlemsnr like '70%';"
end select
Avatar billede moejensen Nybegynder
13. marts 2005 - 20:53 #1
du har stadig ikke fået rettet så der kommer % foran 30, 40, 50, 60 og 70 i casesætningerne, nu har jeg også kun skrevet det 10 gange ;-)
Avatar billede jmc Nybegynder
13. marts 2005 - 21:04 #2
;o)
Ja, men det hjælper ikke på problematikken.
Jeg finder stadigt en som har medlemsnr. 30XXX under alle fire cases.

select case i
  case 1
  strSoegSql = strSoegSql & "AND medlemsnr like '%30%' AND medlemsnr LIKE '%40%' AND medlemsnr like '%50%' AND medlemsnr like '%60%' AND medlemsnr like '%70%';" 
case 3
strSoegSql = strSoegSql & "AND medlemsnr like '%30%';"
case 4
strSoegSql = strSoegSql & "AND medlemsnr like '%40%' AND  medlemsnr like '%50%';"
case 6
strSoegSql = strSoegSql & "AND medlemsnr like '%60%' AND  medlemsnr like '%70%';"
end select
Avatar billede moejensen Nybegynder
13. marts 2005 - 21:10 #3
du burde kun få det ved case 1 og 3
Avatar billede moejensen Nybegynder
13. marts 2005 - 21:11 #4
eller selvfølgelig hvis der er nogle numre der ex hedder 40530, så kommer den også med under hvis du søger på case 3
Avatar billede yellow Nybegynder
13. marts 2005 - 21:42 #5
Du skal bare gøre som du selv skriver i eksemplet: (or1...or2...or3...or4...) and (a or b)...altså benytte paranteser.

strSoegSql = "SELECT * FROM medlemmer WHERE " &_
        "( Firma LIKE '%"&strKey&"%' " & "OR " &_
        ...
        "fax LIKE '%"&strKey&"%') "

select case i
  case 1
  strSoegSql = strSoegSql & "AND ( medlemsnr like '30%' OR medlemsnr LIKE '40%' OR medlemsnr like '50%' OR medlemsnr like '60%' OR medlemsnr like '70%' );" 
case 3
strSoegSql = strSoegSql & "AND medlemsnr like '30%';"
case 4
strSoegSql = strSoegSql & "AND ( medlemsnr like '40%' OR  medlemsnr like '50%' );"
case 6
strSoegSql = strSoegSql & "AND ( medlemsnr like '60%' OR  medlemsnr like '70%' );"
end select

...og du skal ikke have % før 30,40 etc. så matcher %30% nemlig også på f.eks. 40300.
Det var helt fint som du havde gjort i første omgang med % efter tallet.
Avatar billede moejensen Nybegynder
13. marts 2005 - 21:48 #6
cool, så er jeg også blevet klogere i dag ;-)
Avatar billede yellow Nybegynder
13. marts 2005 - 21:52 #7
ok, lyder til det virkede? så smider et svar.
Avatar billede yellow Nybegynder
13. marts 2005 - 21:53 #8
ehh, ups...troede lige det var moejensen der havde oprettet spørgsmålet.
Nå, lader svaret ligge, så kan du jo acceptere hvis det virker :-)
Avatar billede jmc Nybegynder
13. marts 2005 - 22:49 #9
Ja, ok Yellow, jeg var lige nede på noget aftensmad ;o)
Det lader bare ikke til at det virker, f.eks.

SELECT * FROM medlemmer WHERE Firma LIKE '%jan%' OR Adresse LIKE '%jan%' OR Adresse2 LIKE '%jan%' OR vBy LIKE '%jan%' OR Kontakt LIKE '%jan%' OR telefon LIKE '%jan%' OR email LIKE '%jan%' OR fornavn LIKE '%jan%' OR efternavn LIKE '%jan%' OR foedeaar LIKE '%jan%' OR uddannelse LIKE '%jan%' OR ansaettelse LIKE '%jan%' OR afdeling LIKE '%jan%' OR mail LIKE '%jan%' OR web LIKE '%jan%' OR tlf LIKE '%jan%' OR mobil LIKE '%jan%' OR fax LIKE '%jan%' AND ( medlemsnr like '60%' OR medlemsnr like '70%' );

Den første i listen hedder rigtigt nok jan men har også medlemsnummer 30xxx ???
Avatar billede jmc Nybegynder
13. marts 2005 - 23:01 #10
medlemsnr er egentligt defineret som et tal, så skal det vel egentligt være sådan, men dette giver fejl.

select case i
  case 1
  strSoegSql = strSoegSql & "AND ( medlemsnr like 30% OR medlemsnr LIKE 40% OR medlemsnr like 50% OR medlemsnr like 60% OR medlemsnr like 70% );" 
case 3
strSoegSql = strSoegSql & "AND medlemsnr like 30%;"
case 4
strSoegSql = strSoegSql & "AND ( medlemsnr like 40% OR  medlemsnr like 50% );"
case 6
strSoegSql = strSoegSql & "AND ( medlemsnr like 60% OR  medlemsnr like 70% );"
end select

fejler:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error in query expression 'Firma LIKE '%jan%' OR Adresse LIKE '%jan%' OR Adresse2 LIKE '%jan%' OR vBy LIKE '%jan%' OR Kontakt LIKE '%jan%' OR telefon LIKE '%jan%' OR email LIKE '%jan%' OR fornavn LIKE '%jan%' OR efternavn LIKE '%jan%' OR foedeaar LIKE '%jan%' OR uddannelse LIKE '%jan%'.
Avatar billede kjulius Novice
14. marts 2005 - 00:15 #11
--> jmc: i yellows kommentar 21:42:13 angiver han, at du skal bruge paranteser til at omkranse begge dine OR sektioner. Det kan jeg kun give ham ret i, og du synes også selv at vide det, da du jo i selve spørgsmålet spørger om det er sådan man skal gøre.

Af en eller anden grund får du det bare ikke gjort, ref. din kommentar kl. 22:49:26

Du mangler et sæt paranteser omkring dine LIKE sætninger:

SELECT * FROM medlemmer WHERE (Firma LIKE '%jan%' OR Adresse LIKE '%jan%' OR Adresse2 LIKE '%jan%' OR vBy LIKE '%jan%' OR Kontakt LIKE '%jan%' OR telefon LIKE '%jan%' OR email LIKE '%jan%' OR fornavn LIKE '%jan%' OR efternavn LIKE '%jan%' OR foedeaar LIKE '%jan%' OR uddannelse LIKE '%jan%' OR ansaettelse LIKE '%jan%' OR afdeling LIKE '%jan%' OR mail LIKE '%jan%' OR web LIKE '%jan%' OR tlf LIKE '%jan%' OR mobil LIKE '%jan%' OR fax LIKE '%jan%') AND ( medlemsnr like '60%' OR medlemsnr like '70%' );

Ellers vil den sidste betingelse (på medlemsnummeret) kun blive udført på den sidste LIKE (den på fax), mens alle andre LIKE betingelser ikke bliver tjekket for rigtigt medlemsnummer.


Bare en lille observation... :-) Ellers vil jeg overlade slagmarken til de soldater, der allerede befinder sig der. Du synes at være i gode hænder. God nat...
Avatar billede jmc Nybegynder
14. marts 2005 - 14:19 #12
genialt, jeg havde overset den første. ;o)
det virker, 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