webForumDet fria alternativet

SQL-frågor...

33 svar · 410 visningar · startad av Method

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

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

------------------
essentitia preter non sans multiplicandum

LarsGMedlem 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.
------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 03 sep 2001]

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

------------------
--------------
STARZINGER
Tackar & Bockar forumet rockar!
Med ett hugg faller inget träd

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

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

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
#8

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

[Redigerat av Method den 05 sep 2001]

MethodMedlem 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"

------------------
--------------
STARZINGER
Tackar & Bockar forumet rockar!
Med ett hugg faller inget träd

MethodMedlem 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!

------------------
--------------
STARZINGER
Tackar & Bockar forumet rockar!
Med ett hugg faller inget träd

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

------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 05 sep 2001]

MethodMedlem 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

------------------
--------------
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
#13

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
#14

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

------------------
--------------
STARZINGER
Tackar & Bockar forumet rockar!
Med ett hugg faller inget träd

MethodMedlem 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

------------------
--------------
STARZINGER
Tackar & Bockar forumet rockar!
Med ett hugg faller inget träd

LarsGMedlem 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>"

------------------
essentitia preter non sans multiplicandum

MethodMedlem 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!

------------------
--------------
STARZINGER
Tackar & Bockar forumet rockar!
Med ett hugg faller inget träd

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

------------------
essentitia preter non sans multiplicandum

MethodMedlem sedan apr. 2001357 inlägg
#20

Fel i inlägget, raderat inlägg

[Redigerat av Method den 06 sep 2001]

270 ms totalt · 3 externa anrop · v20260731065814-full.30151723
139 ms — hämta forumlista (db)
129 ms — hämta statistik (db)
139 ms — hämta tråd, inlägg och bilagor (db)