13. marts 2005 - 20:34Der 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
;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
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.
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 ???
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%'.
--> 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...
genialt, jeg havde overset den første. ;o) det virker, tak
Synes godt om
Ny brugerNybegynder
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.