webForumDet fria alternativet

Sortera via datum!!

ASP

22 svar · 403 visningar · startad av asp

Medlem sedan aug. 2002733 inlägg
Frågan#1

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!

Medlem sedan mars 20023 561 inlägg
#2

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?

Medlem sedan aug. 2002733 inlägg
#3

Helt korrekt!

Medlem sedan mars 20023 561 inlägg
#4

Är kolummen i tabellen av date/time-typ?

Medlem sedan aug. 2002733 inlägg
#5

japp..

Medlem sedan nov. 20017 144 inlägg
#6

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 &"#"
Medlem sedan aug. 2002733 inlägg
#7

Men jag vill ju att den skall uppdaterasautomatiskt när det kommer en nyhet i en ny månad..

Medlem sedan mars 20023 561 inlägg
#8

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.

Medlem sedan aug. 2002733 inlägg
#9

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

Medlem sedan nov. 20017 144 inlägg
#10

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 &"#"
Medlem sedan aug. 2002733 inlägg
#11

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

Medlem sedan aug. 2002733 inlägg
#12

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
Medlem sedan nov. 20017 144 inlägg
#13

Vill du skriva ut samtliga dagar mellan dessa datum eller bara månaderna?

Medlem sedan aug. 2002733 inlägg
#14

Vill att de skall ståsåhär:

Januari
Februari
Mars
osv..

Medlem sedan nov. 20017 144 inlägg
#15

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?

Medlem sedan aug. 2002733 inlägg
#16

Japp! och value skall vara månadens nummer.. dvs:

<option value="5">Maj</option>
<option value="6">Juni</option>
<option value="7">Juli</option>
Medlem sedan nov. 20017 144 inlägg
#17

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

Medlem sedan nov. 20017 144 inlägg
#18

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
Medlem sedan nov. 20017 144 inlägg
#19

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

Medlem sedan aug. 2002733 inlägg
#20

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
275 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
135 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)