Avatar billede kbonline Nybegynder
16. februar 2003 - 21:14 Der er 11 kommentarer og
1 løsning

sorter erfter flere kriterier

Hvordan sorterer jeg mit søgeresultat når jeg har 11 formularfelter hvor brugeren kan markere at det vigtigste er 1, 4 og 8.

Resultatet skal så være en liste over ALLE database udtræk hvor disse 3 rækker opfylder kravet, men den skal IKKE bortsortere nogen som har disse tre men også har flere punkter markeret i databasen.

Jeg håber i forstår hvad jeg mener
(det skal bruges tilsøgeformularen i højre side på denne side :

www.fedtmule.dk/feriefun

forestil dig fx at du bare vil være sikker på at der er TV i huset, og derfor kun markerer TV og trykker på søg)
Avatar billede avlund Nybegynder
16. februar 2003 - 21:24 #1
I dit tilfælde vil jeg foreslå at du laver en mængde variabler (eller et array), hvor du giver dem værdi hvis og kun hvis svaret er ja. F.eks:

if Request("husdyrtilladt") = "Ja" then
husdyrtilladt = "husdyrtilladt = True"
end if

etc.

derefter kan du så integrere dem i din SQL á la:

SELECT noget FROM tabel WHERE " & husdyrtilladt ", " & tv etc.

SQL-linien skal være lidt mere avanceret, da den skal tage højde for antallet af kommaer, en evt. fjernelse af WHERE hvis der ingen kriterier er etc. Det er imidlertid princippet.
Avatar billede avlund Nybegynder
16. februar 2003 - 21:24 #2
Rettelse:

SELECT noget FROM tabel WHERE " & husdyrtilladt & ", " & tv etc.

og som sagt skal den også tweakes yderligere, afhængig af din databaseopbygning m.v.
Avatar billede kbonline Nybegynder
16. februar 2003 - 21:51 #3
jeg får denne fejl når jeg gør som du beskriver:
Microsoft OLE DB Provider for ODBC Drivers fejl '80040e14'

[Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket ", , , , , , , ,".

/feriefun/soeg.asp, linje 66
Avatar billede kbonline Nybegynder
16. februar 2003 - 21:52 #4
jeg har lavet det sådan her :
<%
if Request("pool") = "ja" then
pool = "pool = True"
end if
%>
<%
if Request("sauna") = "ja" then
sauna = "sauna = True"
end if
%>
<%
if Request("spabad") = "ja" then
spabad = "spabad = True"
end if
%>
<%
if Request("solarie") = "ja" then
solarie = "solarie = True"
end if
%>
<%
if Request("opvaskemaskine") = "ja" then
opvaskemaskine = "opvaskemaskine = True"
end if
%>
<%
if Request("tv") = "ja" then
tv = "tv = True"
end if
%>
<%
if Request("parabol") = "ja" then
parabol = "parabol = True"
end if
%>
<%
if Request("husdyr") = "ja" then
husdyr = "husdyr = True"
end if
%>
<%
if Request("brandeovn") = "ja" then
brandeovn = "brandeovn = True"
end if
%>

<%
' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath ("huse.mdb")
Conn.Open DSN

' SQL forespørgsel

strSQL = "Select * from sommerhuse WHERE " & pool & ", " & sauna & ", " & spabad & ", " & solarie & ", " & opvaskemaskine & ", " & tv & ", " & parabol & ", " & husdyr & ", " & brandeovn
' Udfør forespørgsel (rs indeholder nu resultatet)
Set rs = Conn.Execute(strSQL)
%>
<p align="center"><font size="6">Søgeresultat</p>
<%
' Gennemløb Recordset (rs) med en løkke
Do
%>
Avatar billede avlund Nybegynder
16. februar 2003 - 23:15 #5
Jep. Sagen er som førnævnt, at der kommer for mange kommaer ud af det. Jeg prøver at omskrive din kode til noget der virker:

' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath ("huse.mdb")
Conn.Open DSN


' MINE RETTELSER


dim cnt(), chk(), vr

cnt(0) = "pool"
cnt(1) = "sauna"
cnt(2) = "spabad"
cnt(3) = "solarie"
cnt(4) = "opvaskemaskine"
cnt(5) = "tv"
cnt(6) = "parabol"
cnt(7) = "husdyr"
cnt(8) = "brandeovn"

vr = 0

for i = 0 to 8
  if Request( cnt(i) ) = "ja" then
    chk(vr) = cnt(i) & " = True"
    vr = vr + 1
  end if
next

cnt2 = Ubound( chk )

strSQL = "SELECT * FROM sommerhuse"
if cnt2 > 1 then
  strSQL = strSQL & " WHERE "
  for j = 0 to ( cnt2 - 1 )
    strSQL = strSQL & chk(j) & " AND "   
  next
  strSQL = strSQL & chk(cnt2)
end if

' SLUT PÅ MINE RETTELSER


' Udfør forespørgsel (rs indeholder nu resultatet)
Set rs = Conn.Execute(strSQL)
%>
<p align="center"><font size="6">Søgeresultat</p>
<%
' Gennemløb Recordset (rs) med en løkke
Do
%>


Jeg ved godt det ser meget kompliceret ud, og der kan være fejl, da jeg ikke har testet det endnu, men har skrevet det direkte fra hovedet. Desuden er jeg ikke så skrap med arrays i ASP. Tjek det og fortæl mig om det virker.
Avatar billede kbonline Nybegynder
17. februar 2003 - 12:36 #6
Det skal nok bare være mig det ikke lige kan "hitte ud af det"
Men jeg kan altså ikke få det til at virke :-(
Jeg har meget optimistisk lagt 3 filer ud i en zip fil (29 kb) = soeg.htm + soeg.asp + huse.mdb
de ligger her :
http://www.fedtmule.dk/feriefun/feriefun.zip

Jeg håbede så at jeg kunne lokke dig til at kikke og se om du kan finde ud af hvad jeg gør galt.
Hvis du kan finde fejlen og få det til at virke, må vi lige finde ud af en "findeløn" :-)
Min mail adresse er : kristian@kbonline.dk
Avatar billede midas_dk Nybegynder
17. februar 2003 - 13:37 #7
Hvad med kun at tilføje de relevante kriterier til SQL strengen?

Altså:

strSQL = "Select * from sommerhuse WHERE "

if Request("opvaskemaskine") = "ja" then
  strSQL = strSQL & "opvaskemaskine = True AND "
end if

... og så videre, for til sidst at sige

strSQL = strSQL & "1 = 1"

- så har du til sidst en ganske valid sql sætning!!!
Avatar billede avlund Nybegynder
17. februar 2003 - 17:02 #8
Jeg har lavet nogle rettelser i din htm- og asp-fil. Der er stadig noget du skal tage højde for, såsom forskellen mellem indendørs og udendørs pool, men nu virker den i hvert fald.

http://www.avlund.dk/t/feriefun.zip

Jeg har lavet en udskrift ( Response.Write strSQL ) af sætningen midt i filen, så du kan se hvad der foregår. Den skal selvfølgelig fjernes inden du lægger det online.

Sig til hvis der stadig skulle være fejl. Jeg har afprøvet det og det ser ud til at fungere fint dog.
Avatar billede kbonline Nybegynder
17. februar 2003 - 23:42 #9
1000 tak for hjælpen
Avatar billede avlund Nybegynder
18. februar 2003 - 02:58 #10
No problem, glad for at kunne hjælpe.
Avatar billede kbonline Nybegynder
03. marts 2003 - 00:33 #11
avlund - send mig lige en mail med din adresse igen

Min maskine "døde" og skulle formateres, og ALT gik tabt :-(
Avatar billede kbonline Nybegynder
10. marts 2003 - 23:00 #12
send mig lige en mail med din adresse igen - tak (var nød til at formatere min HD)
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