SQL-frågor...

ASP

33 svar · 416 visningar · startad av Method

Medlem sedan apr. 2001357 inlägg
Trådstart#1

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

Medlem sedan dec. 200012 464 inlägg
#2

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.

Medlem sedan dec. 200012 464 inlägg
#3

|Å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.

Medlem sedan apr. 2001357 inlägg
#4

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 ??

Medlem sedan dec. 200012 464 inlägg
#5
sql = "select * from t where datediff(""yyyy"",age,date) between " & request.form("age")

Fortfarande Access-specifikt.

Medlem sedan apr. 2001357 inlägg
#6

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

Medlem sedan dec. 200012 464 inlägg
#7

Jo, det är tanken. Man lägger bara till villkor i select-satsen om det är något ifyllt i formuläret.

Medlem sedan apr. 2001357 inlägg
#8

Inlägg raderat...
[Redigerat av Method den 05 sep 2001]

[Redigerat av Method den 05 sep 2001]

Medlem sedan apr. 2001357 inlägg
#9

Ä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"
Medlem sedan apr. 2001357 inlägg
#10

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!

Medlem sedan dec. 200012 464 inlägg
#11

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å.

Medlem sedan apr. 2001357 inlägg
#12

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

Medlem sedan juni 20019 024 inlägg
#13

where = where & " and "

Medlem sedan dec. 200012 464 inlägg
#14

Jag hade missat ytterligare en & i mitt inlägg. Jag har redigerat det nu.

Medlem sedan apr. 2001357 inlägg
#15

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
Medlem sedan apr. 2001357 inlägg
#16

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
Medlem sedan dec. 200012 464 inlägg
#17

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>"
Medlem sedan apr. 2001357 inlägg
#18

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!

Medlem sedan dec. 200012 464 inlägg
#19
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.

Medlem sedan apr. 2001357 inlägg
#20

Fel i inlägget, raderat inlägg

[Redigerat av Method den 06 sep 2001]

264 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)