webForumDet fria alternativet

automatutskrift av månader och år (nyhetsscript)

ASP

12 svar · 263 visningar · startad av Liam

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

Hej

Har en tabell:

Nyhet | Date | Month | Year

t.ex.

Blabla | 2003-03-21 | 03 | 2003

Nu är det så att tabellen innehåller väldigt mycket information från flera olika månader och år.

Jag skulle därför vilja presentera alla månader lite snyggt längst ner.

om jag började skriva nyheter i juli 2001 och om vi låtsas att dagens datum är 2003-11-19 så blir det t.ex.

2001
------
Juli, Augusti, September, Oktober, November, December

2002
------
Januari, Februari, Mars, April, Maj, Juni, Juli, Augusti, September, Oktober, November, December

2003
------
Januari, Februari, Mars, April, Maj, Juni, Juli, Augusti, September, Oktober, November

Dvs, December syns inte eftersom det inte finns någon post för den månaden i det året.

Problemet är ju att jag vill att detta ska ske med automatik. Dvs, den ska känna av att juni 2001 var första månaden och att November är sista månaden som det finns nyheter... om jag skriver en nyhet i December så ska man ju se den sen... man ska alltså inte behöva gå in och lägga till manuellt.

Någon som har en bra lösning?

Tack på förhand!

Medlem sedan dec. 200012 464 inlägg
#2
sql = "select distinct year(date),month(date) from nyhet order by 1,2"
set rs = connect.execute(sql)
pyear = 0
months = ""
while not rs.eof
 if  pyear <> clng(rs(0)) then
     if  months <> "" then 
         response.write months & "<br>"
          months = ""
     end if
     pyear = clng(rs(0))
     response.write pyear & "<br>"
     response.write "-------" & "<br"
 end if
  if  months <> "" then months = months & ", "
  months = months & monthname(cint(rs(1)))
  rs.movenext
wend
  if  months <> "" then response.write months & "<br>"
rs.close
set rs = nothing

Beroende på DBMS så får du kanske ändra på funktionerna year och month

Det är onödigt att lagra år och månad separat.

Medlem sedan aug. 200340 inlägg
#3

Åren listas upp snyggt, men månaderna saknas. Troligen är det olika DBMS. Jag kör access med jet. Tips?

Medlem sedan dec. 200012 464 inlägg
#4

Om det är access så får du skriva så här istället (date är inget bra namn på en kolumn.)

ql = "select distinct year([date]),month([date]) from nyhet order by 1,2"

Kan du lägga till en utskrift på vilka värden du får tillbaka från databasen?

while not rs.eof
  response.write "Debug: " & rs(0) & ":" rs(1) & "<br>"
Medlem sedan aug. 200340 inlägg
#5

Tog och ändrade date till datum istället.

Resultat av debug:

Debug: 2001:8

2001
-------Debug: 2001:10
Debug: 2001:11
Debug: 2001:12
Debug: 2002:1
August, September, October, November, December

2002
-------Debug: 2002:3
Debug: 2002:4
Debug: 2002:5
Debug: 2002:6
Debug: 2002:7
Debug: 2002:8
Debug: 2002:9
Debug: 2002:10
Debug: 2002:11
Debug: 2002:12
Debug: 2003:1
January, February, March, April, May, June, July, August, September, October, November, December

2003
-------Debug: 2003:3
Debug: 2003:4
Debug: 2003:5
Debug: 2003:6
Debug: 2003:7
Debug: 2003:9
Debug: 2003:10
Debug: 2003:11
Debug: 2003:12
January, February, March, April, May, June, July, September, October, November, December

Medlem sedan dec. 200012 464 inlägg
#6

Om du lägger till följande

session.lcid = 1053

så skall du få svenska månadsnamn.

Medlem sedan aug. 200340 inlägg
#7

Får passa på att tacka för all hjälp hittills. Har fungerat skitbra, språket blev rätt nu också. Men... om jag tar bort debugen så syns inte månaderna längre. Varför kommer de bara upp när man väljer att skriva ut rs(0) och rs(1) ?

Medlem sedan dec. 200012 464 inlägg
#8

Det förstår jag inte riktigt. Jag tyckte också att du fick upp för många månader i förhållande till debugutskriften. T.ex. så borde inte september 2001 ha kommit med.

Kan du posta din nuvarande kod?

Medlem sedan aug. 200340 inlägg
#9

Koden är snarlik din, har inte ändrat nåt knappt:

sql = "select distinct year(datum),month(datum) from tblNews order by 1,2"
set rs = connect2.execute(sql)
pyear = 0
months = ""

while not rs.eof
response.write "Debug: " & rs(0) & ":" & rs(1) & "<br>"
if pyear <> clng(rs(0)) then
if months <> "" then
response.write months & "<br>"
months = ""
end if
pyear = clng(rs(0))
response.write "<br>" & pyear & "<br>"
response.write "-------" & "<br"
end if

if months <> "" then months = months & ", "
months = months & monthname(cint(rs(1)))
rs.movenext
wend
if months <> "" then response.write months & "<br>"
rs.close
set rs = nothing

och sen håller jag med om att debugen inte stämmer riktigt, men månaderna som skrivs ut är helt rätt. Det finns data i alla de månaderna.

Medlem sedan dec. 200012 464 inlägg
#10

Här är det nog.

 response.write "-------" & "<br"
 response.write "-------" & "<br>"
Medlem sedan aug. 200340 inlägg
#11

GULD!

Alltid ska det vara något litet "fel" som ställer till det...

Jag lade även till:

months = months & "<a href='nyheter.asp?month=" & rs(1) & "&year=" & rs(0) & "'>" & monthname(cint(rs(1))) & "</a>"

istället för:

months = months & monthname(cint(rs(1)))

för att kunna göra länkar av det.

En utseendegrej jag tänkte på bara... är det svårt att ändra ordning på åren så att 2003 kommer överst istället för 2001? Det kanske blir mer logiskt så ur användarperspektiv?

Medlem sedan dec. 200012 464 inlägg
#12

Nej då

ql = "select distinct year(datum),month(datum) from nyhet order by 1 desc,2"
Medlem sedan aug. 200340 inlägg
#13

aha, så enkelt det var. jag lade desc sist och fick det inte att fungera..

Jättetack för all hjälp!

272 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
146 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
145 ms — ändringar (db)