Låt se om jag har fattat detta rätt nu:
Du vill ha en selectbox innehållande de måndader som det finns nyheter ifrån i databasen. När man sedan väljer ett värde från selectboxen ska alla nyheter från den månaden visas.
Är detta rätt uppfattat?
22 svar · 403 visningar · startad av asp
Hej!
Jag har en databas med tabellen Nyheter där nyheter samlas, där sparar jag rubrik, text och sjävklart även datumet.
Nu vill jag sortera nyheter via månader så jag kan välja att visa nyheter mellan de olika månaderna. Det skall vara i en Select box.
Hoppas ni förstår!
Låt se om jag har fattat detta rätt nu:
Du vill ha en selectbox innehållande de måndader som det finns nyheter ifrån i databasen. När man sedan väljer ett värde från selectboxen ska alla nyheter från den månaden visas.
Är detta rätt uppfattat?
Helt korrekt!
Är kolummen i tabellen av date/time-typ?
japp..
Något liknande kanske:
datum_select1=ReQuest.form("datum1")
datum_select2=ReQuest.form("datum2")
SELECT * FROM tabellen WHERE datum between #"& datum_select1 &"# and #"& datum_select2 &"#"
Men jag vill ju att den skall uppdaterasautomatiskt när det kommer en nyhet i en ny månad..
Du får ju hämta alla nyhetsdatum:
SELECT DISTINCT datum FROM nyheter ORDER BY datum
Sedan får du loopa ut alla datum i form av månads namn:
Do until objRs.EOF
Response.Write("<option>" & month(objRs("datum")) & "</option>")
objRs.MoveNext
Loop
Sedan när man har valt månad får du hämta alla nyheter vars datum stämmer överens med värdet i selectboxen.
"Sedan när man har valt månad får du hämta alla nyheter vars datum stämmer överens med värdet i selectboxen."
Hur gör jag det?
Så här kanske:
datum_select1 = ReQuest.form("datum")
datum_select2 = dateadd("m",1,datum_select1)
"SELECT * FROM tabellen WHERE datum between #"& datum_select1 &"# and #"& datum_select2 &"#"
Denna kod går väl inte?
SELECT DISTINCT datum FROM nyheter ORDER BY datum
Eftersom datum är tex 2003-07-17 22:13:34 så de kommer aldrig upprepas.
Borde man inte skriva month(datum)?
Ok.
Strunta i det jag gjorde ovan och hjlälp med med detta i stället.
Hur skriver jag ut alla månader från ett angett datum tills dagens?
typ...
manad1 = month("2003-05-12")
manad2 = month(date())
Do Until manad1 => manad2
Response.Write("<option>" & manad1 & "</option>")
manad1=manad1+1
Loop
Vill du skriva ut samtliga dagar mellan dessa datum eller bara månaderna?
Mellan 2003-05-12 och 2003-07-19(som i ditt exempel ovan) så vill du att det skall stå:
<option>Maj</option>
<option>Juni</option>
<option>Juli</option>
...eller?
Japp! och value skall vara månadens nummer.. dvs:
<option value="5">Maj</option>
<option value="6">Juni</option>
<option value="7">Juli</option>
Skulle kunna vara en variant:
Dim manad1,manad2,dtpart,i
manad1 = "2003-05-12"
manad2 = datediff("m",manad1, date)
dtpart=datepart("m",manad1)
i=0
for i = 0 to manad2
Response.Write("<option value="& dtpart &">" & monthname(dtpart) & "</option>")
dtpart=dtpart+1
next
/RED
Skulle kunna vara en variant för svenska månader.
Dim manad1,manad2,dtpart,i,dtarray
manad1 = "2003-05-12"
manad2 = datediff("m",manad1, date)
dtpart=datepart("m",manad1)
dtarray=array("januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december")
i=0
for i = 0 to manad2
Response.Write("<option value="& dtpart &">" & dtarray(dtpart-1) & "</option>")
dtpart=dtpart+1
next
Nja, det blir inte så fint om det är fler än 12 månader som skall visas.
Testa då att lägga till:
if dtpart > 12 then dtpart = 1
under: dtpart = dtpart +1
Ok, så koden blir:
Dim manad1,manad2,dtpart,i,dtarray
manad1 = "2003-05-12"
manad2 = datediff("m",manad1, date)
dtpart=datepart("m",manad1)
dtarray=array("januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december")
i=0
for i = 0 to manad2
Response.Write("<option value="& dtpart &">" & dtarray(dtpart-1) & "</option>")
dtpart=dtpart+1
if dtpart > 12 then dtpart = 1
end if
next