MethodMedlem sedan apr. 2001357 inlägg Jag e inte så bra på att optimera SQL-frågor så jag skulle gärna vilja ha lite hjälp med detta.
Jag skall ha ett par dropdownmenyer närmare bestämt 5 st som jag skulle behöva lite hjälp med att "utforma":
|Ålder|
där man kan välja från 20 och uppåt med 5 års intervaller t ex 20 - 25 år,
Hur skal denna dropdown ha för value för att få det?
|Utbildning|
Denna har jag redan löst
|Ansökningsdatum|
Där vill jag ha en sån dropdown som finns på webforum.
Visa inlägg från de senaste 2 dagarna osv.
Hur skal denna dropdown ha för value för att få det?
|Kontor|
Denna har jag redan löst
|Jobb|
Denna har jag redan löst
-----------------------------------
Nu till själva SQL-frågan.
Jag vill gärna ha hjälp med att utforma en If-sats som tilllåter att alla olika alternativ kan väljas. här har jag en början på en If-sats:
if kontor= "" then
if jobb = "" then
SQL = "SELECT * FROM ansokan ORDER BY Efternamn ASC"
else
SQL = "SELECT * FROM ansokan where jobb = '" & jobb & "' ORDER BY Efternamn ASC"
end if
else
if jobb = "" then
SQL = "SELECT * FROM ansokan WHERE kontor = '" & kontor & "' ORDER BY Efternamn ASC"
else
SQL = "SELECT * FROM ansokan WHERE kontor = '" & kontor & "' AND jobb = '" & jobb & "' ORDER BY Efternamn ASC"
end if
end if
men den behöver byggas på lite mer med de andra alternativen.
Tack på förhand
Jonas
------------------
--------------
STARZINGER
Tackar & Bockar forumet rockar!
Med ett hugg faller inget träd
[Redigerat av Method den 03 sep 2001]
LarsGMedlem sedan dec. 200012 464 inlägg När det gäller SQL-frågorna så blir det enklast att bygga where-delen för sig
sql = "select * from ansokan "
where = ""
if jobb <> "" then
if where = "" then
where = " where "
else
where = " and "
end if
where = " jobb = '" & jobb & "'"
end if
if kontor <> "" then
if where = "" then
where = " where "
else
where = " and "
end if
where = " kontor = '" & kontor & "'"
end if
'med flera
sql = sql & where & " order by Efternamn"
(Man kan skriva delen som bygger upp where som en sub för att få enklare kod.
sub buildWhere(byref where,column,restr)
if where <> "" then
where = " where "
else
where = where & " and "
end if
where = where & column & "= '" & restr & "'"
end sub
och sedan anropa den med
where = ""
call buildWhere where,"jobb",jobb
call buildWhere where,"kontor",kontor
'mfl
)
Jag återkommer om dropdown, måste jobba nu.
------------------
essentitia preter non sans multiplicandum
LarsGMedlem sedan dec. 200012 464 inlägg
|Ålder|
där man kan välja från 20 och uppåt med 5 års intervaller t ex 20 - 25 år,
Hur skal denna dropdown ha för value för att få det?
<select name="age">
<option value=" 0 and 5 ">0 till 5
<option value=" 5 and 10 ">6 till 10
..
</select>
på aspsidan
sql = "select * from t where age between " & request.form("age")
|Ansökningsdatum|
Där vill jag ha en sån dropdown som finns på webforum.
Visa inlägg från de senaste 2 dagarna osv.
Hur skal denna dropdown ha för value för att få det?
<SELECT NAME="SearchDate">
<OPTION VALUE="-2">Sedan 2 dagar
<OPTION VALUE="-5">Sedan 5 dagar
...
</SELECT>
på asp-sidan
sql = "select * from t " &_
" where dateColumn >= " &_
" dateadd(""d""," & request.form("searchDate") & ",date)"
Denna lösning är specifik för Access. Använder du någon annan DBMS så får vi väl lösa det då.
red: glömde ett citat.
------------------
essentitia preter non sans multiplicandum
[Redigerat av LarsG den 03 sep 2001]
MethodMedlem sedan apr. 2001357 inlägg Jag har inte sparat åldern utan har sparat födelsedatum t ex 1978-05-18
hur funkar det om man vill hämta ur med hjälp av den koden du gav mig LarsG ??
------------------
--------------
STARZINGER
Tackar & Bockar forumet rockar!
Med ett hugg faller inget träd
LarsGMedlem sedan dec. 200012 464 inlägg sql = "select * from t where datediff(""yyyy"",age,date) between " & request.form("age")
Fortfarande Access-specifikt.
------------------
essentitia preter non sans multiplicandum
MethodMedlem sedan apr. 2001357 inlägg Jga vet att jag kommer med en jobbig fråga nu ;) men jag måste få till detta och jag vet inte riktigt hur jag skall göra.
Jag vill ha så att man kan välja "fritt" ur dropdownerna, t ex väljer jag bara kontor och jobb så skall den bara söka på de kreterierna osv. hoppas du förstår hur jag menar.
är det detta den koden gör?
sql = "select * from ansokan "
where = ""
if jobb <> "" then
if where = "" then
where = " where "
else
where = " and "
end if
where = " jobb = '" & jobb & "'"
end if
if kontor <> "" then
if where = "" then
where = " where "
else
where = " and "
end if
where = " kontor = '" & kontor & "'"
end if
'med flera
sql = sql & where & " order by Efternamn"
Om jag kunde få lite hjälp med detta hade jag varit hel glad ;)
Tack på förhand!
MVH
Jonas
------------------
--------------
STARZINGER
Tackar & Bockar forumet rockar!
Med ett hugg faller inget träd
[Redigerat av Method den 05 sep 2001]
LarsGMedlem sedan dec. 200012 464 inlägg Jo, det är tanken. Man lägger bara till villkor i select-satsen om det är något ifyllt i formuläret.
------------------
essentitia preter non sans multiplicandum
MethodMedlem sedan apr. 2001357 inlägg Inlägg raderat...
[Redigerat av Method den 05 sep 2001]
[Redigerat av Method den 05 sep 2001]
MethodMedlem sedan apr. 2001357 inlägg Är det så här koden skall se ut?
Kan nån hjälpa mig med detta, jag behöver verkligen hjälp ;)
sql = "select * from ansokan "
where = ""
if jobb <> "" then
if where = "" then
where = " where "
else
where = " and "
end if
where = " jobb = '" & jobb & "'"
end if
if kontor <> "" then
if where = "" then
where = " where "
else
where = " and "
end if
where = " kontor = '" & kontor & "'"
end if
if age <> "" then
if where = "" then
where = " where "
else
where = " and "
end if
where = "datediff(""yyyy"",age,date between " & request.form("age")"
end if
if utb <> "" then
if where = "" then
where = " where "
else
where = " and "
end if
where = " utbildning = '" & utb & "'"
end if
if SearchDate <> "" then
if where = "" then
where = " where "
else
where = " and "
end if
where = "dateColumn >= dateadd(""d""," & request.form("searchDate") & ",date)"
end if
sql = sql & where & " order by Efternamn"
------------------
--------------
STARZINGER
Tackar & Bockar forumet rockar!
Med ett hugg faller inget träd
MethodMedlem sedan apr. 2001357 inlägg Jag vet att jag böjar bli tjötig nu
men kan nån vara så snäll och hjälpa mig med detta, jag vill gärna få igång denna funktion.
Tack på förhand!
------------------
--------------
STARZINGER
Tackar & Bockar forumet rockar!
Med ett hugg faller inget träd
LarsGMedlem sedan dec. 200012 464 inlägg Ursäkta, jag skrev lite fel i mitt tidigare inlägg.
sql = "select * from ansokan "
where = ""
if jobb <> "" then
if where = "" then
where = " where "
else
where = where & " and "
end if
where = where & " jobb = '" & jobb & "'"
end if
if kontor <> "" then
if where = "" then
where = " where "
else
where = where & " and "
end if
where = where & " kontor = '" & kontor & "'"
end if
if age <> "" then
if where = "" then
where = " where "
else
where = where & " and "
end if
where = where & "datediff(""yyyy"",age,date between " & request.form("age")"
end if
if utb <> "" then
if where = "" then
where = " where "
else
where = where & " and "
end if
where = where & " utbildning = '" & utb & "'"
end if
if SearchDate <> "" then
if where = "" then
where = " where "
else
where = where & " and "
end if
where = where & "dateColumn >= dateadd(""d""," & request.form("searchDate") & ",date)"
end if
sql = sql & where & " order by Efternamn"
Borde bli bättre så.
------------------
essentitia preter non sans multiplicandum
[Redigerat av LarsG den 05 sep 2001]
MethodMedlem sedan apr. 2001357 inlägg Hej Lars jag får denna fel
Microsoft VBScript compilation error '800a0401'
Expected end of statement
/int/test.asp, line 47
where = where " and "
----------------^
med den nya koden du gav
------------------
--------------
STARZINGER
Tackar & Bockar forumet rockar!
Med ett hugg faller inget träd
[Redigerat av Method den 05 sep 2001]
[Redigerat av Method den 05 sep 2001]
PaceMedlem sedan juni 20019 024 inlägg where = where & " and "
------------------
"It's not where ya from it's where ya at"
[Redigerat av Pace den 05 sep 2001]
LarsGMedlem sedan dec. 200012 464 inlägg Jag hade missat ytterligare en & i mitt inlägg. Jag har redigerat det nu.
------------------
essentitia preter non sans multiplicandum
MethodMedlem sedan apr. 2001357 inlägg så här funkar det nu allt funkar utom när man blandar in ålders dropdownen då får jag följande fel
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'jobb = 'Luffare' and kontor = 'Linköping' and datediff([yyyy],age,date between 46 and 65 and utbildning = 'Högskoleingenjör' order by Efternamn'.
/int/test.asp, line 74
------------------
--------------
STARZINGER
Tackar & Bockar forumet rockar!
Med ett hugg faller inget träd
MethodMedlem sedan apr. 2001357 inlägg Och detta felet får jag när jag väljer från searchDate dropdownen
Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 3.
/int/test.asp, line 74
------------------
--------------
STARZINGER
Tackar & Bockar forumet rockar!
Med ett hugg faller inget träd
LarsGMedlem sedan dec. 200012 464 inlägg Vi betar av mina fel.
where = "datediff(""yyyy"",age,date) between " & request.form("age")"
missade en parentes där.
Det andra felet är lite svårare. Det brukar bero på att man (jag) missar en ' eller liknade eller så är det en felstavning av ett kolumnnamn.
Kan du visa hela sql-satsen så är det lättare att se vad som är fel.
Dvs, precis efter det att du har byggt ihop strängen så kan du lägga till
response.write "sql: " & sql & "<br>"
------------------
essentitia preter non sans multiplicandum
MethodMedlem sedan apr. 2001357 inlägg Hej igen ;)
jag la in din kod men den vill inte funka
if age <> "" then
if where = "" then
where = " where "
else
where = where & " and "
end if
where = "datediff(""yyyy"",age,date) between " & request.form("age")'"
end if
jag får denna fel
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error in FROM clause.
/int/test.asp, line 76
Här e några av fälten i databasen
|fod_datum|
typ: Datum/tid
där användaren sparar födelsedatum i formatet MM/DD/YYYY
|datum|
typ: Datum/tid
där sparas vilket datum och tid ansökan las upp i databasen
MM/DD/YYYY HH:MM:SS
hoppas att detta skall hjälpa något ;)
Tack på förhand!
------------------
--------------
STARZINGER
Tackar & Bockar forumet rockar!
Med ett hugg faller inget träd
LarsGMedlem sedan dec. 200012 464 inlägg where = where & "datediff(""yyyy"",fod_datum,date) between " & request.form("age")'"
så.
Om du får något fel är det enklast att felsöka om du visar hela sql-frågan.
------------------
essentitia preter non sans multiplicandum
MethodMedlem sedan apr. 2001357 inlägg Fel i inlägget, raderat inlägg
[Redigerat av Method den 06 sep 2001]