webForumDet fria alternativet

Loopa fram poster till rätt kategori!

ASP

11 svar · 514 visningar · startad av medialabs

Medlem sedan mars 20023 686 inlägg
Frågan#1

// UPPDATERADE DETTA INLÄGG: //

Korthet: Jag vill loopa fram ett antal poster från en tabell och lägga dessa under rätt månad. Jag önskar att alla tolv månader skrivs ut och sedan läggs posterna under rätt månad. Om ingen post finns för någon månad så ska en text skrivas ut: "Inga händelser under denna månad..".

Tror att jag har grävt min egen grav med det vi diskuterade nyss, har tänkt om och skapat följande i MySQL.

Tblevenemang
----------------------------------------
strEventID | strEventRubrik | strEventDatum | StrEventManad | strEventInfo | strEventLank
-----------------------------------------------------------------------------------------------------------
1	    datakurs		1/18/2006        1            infotext       http://adress.se
2	    matkurs		4/13/2006        4            infotext       http://adress2.se

Förklaring, strEventManad innehåller ett nummer mellan 1-12 som symboliserar Januari, februari... där 1 betyder Januari osv..

och sedan har jag skapat en tabell till som innehåller månaderna.

tblEventKat
----------------------------------------
strKatid | strEventmanadsNamn | 
-----------------------------------------------------------------------------------------------------------
1	    Januari		
2	    Februari
3	    Mars
4	    April
5	    Maj
6	    Juni
7	    Juli
8	    Augusti
9	    September
10	    Oktober
11	    November
12	    December

Jag vill på något sätt lista fram månaderna efter varandra så här och samtidigt hämta tillhörande poster från Evenemangstabellen och att dessa sorteras under rätt månad genom att jag har märkt varje post i evenemangstabellen med ett StrEventManad nummer som syftar till strKatid i den andra tabellen. :

<html>
...

<b>Januari</b><br>
<%här skrivs alla poster ut som har StrEventManad = 1 som syboliserar Januari%>
....
<b>April</b><br>
<%här skrivs alla poster ut som har StrEventManad = 4 som syboliserar April%>

...
</html>
Response.write "<a href=""/public/EventInfo.asp?id=" & RSEventSQL("strEventID") & """ title=""" & RSEventSQL("strEventRubrik") & """>" & RSEventSQL("strEventRubrik") & "</a><br>" & RSEventSQL("strEventDatum") & "<br><br>"

// Gammalt://
Har ett irriterande problem, Vill genom ASP loopa fram alla poster som finns i databasen, (Mysql). Till rätt "kategori" eller rubrik, från tabellen: tblevenemang som innehåller strID, strRubrik, strDatum, StrManad, strInfo. Jag tänkte att man kunde sortera alla poster efter "strManad" som bestämmer under vilken kategori den ska hamna under, har tolv kategorier på sidan, Januari, februari, mars osv.. och strManad innehåller tex "Mars" så ska den posten läggas under posten:

Evenemang - Februari:
<meddelande att det ej finns några evenemang under månaden..>

Evenemang - Mars:
<här visas postens rubrik i fom av en länk för detaljer>

osv...
Som ni ser, har allt i huvudet, men inte kunskaperna att förverkliga detta... Hoppas att någon skall kunna hjälpa mig. Jag bjuder på en öl :bire

Medlem sedan mars 20023 686 inlägg
#2

Har kommit så här långt i mitt sökande och progammerande, fungerar tyvärr inte riktigt, nu listar den inte fram något, det finns bara en enda post i databasen, där strEventManad är April. Men inget skrivs ut under April. står bara Månaden tom..

Och min kod känns verkligen som om jag har hämtat den direkt från Idg's webbstudio från 1997. Hårtussarna börjar ryka från min skalp nu..

<%

	Set EventConnection = Server.CreateObject("ADODB.Connection")
	EventConnection.Open "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=; DATABASE=; USER=; PASSWORD=; OPTION=3;"

	strEventSQL = "SELECT * FROM tblevenemang"
	set RSEventSQL = EventConnection.Execute (strEventSQL)

response.write "<b>Januari</b><br><br>"
if strEventManad = "Januari" then
	do while not RSEventSQL.eof
     		Response.write "<b><a href=""/public/EventInfo.asp?id=" & RSEventSQL("strEventID") & """ title=""" & RSEventSQL("strEventRubrik") & """>" & RSEventSQL("strEventRubrik") & "</a></b><br>" & RSEventSQL("strEventDatum") & "<br><br>"
     	RSEventSQL.MoveNext
	Loop
else
	response.write "månaden tom - Januari<br><br>"
end if

response.write "<b>Februari</b><br><br>"
if strEventManad = "Februari" then
	do while not RSEventSQL.eof
     		Response.write "<b><a href=""/public/EventInfo.asp?id=" & strEventSQL("strEventID") & """ title=""" & strEventSQL("strEventRubrik") & """>" & strEventSQL("strEventRubrik") & "</a></b><br>" & strEventSQL("strEventDatum") & "<br><br>"
     	RSEventSQL.MoveNext
	Loop
else
	response.write "månaden tom - februari<br><br>"
end if

response.write "<b>Mars</b><br><br>"
if strEventManad = "Mars" then
	do while not RSEventSQL.eof
     		Response.write "<b><a href=""/public/EventInfo.asp?id=" & strEventSQL("strEventID") & """ title=""" & strEventSQL("strEventRubrik") & """>" & strEventSQL("strEventRubrik") & "</a></b><br>" & strEventSQL("strEventDatum") & "<br><br>"
     	RSEventSQL.MoveNext
	Loop
else
	response.write "månaden tom - mars<br><br>"
end if

response.write "<b>April</b><br><br>"
if strEventManad = "April" then
	do while not RSEventSQL.eof
     		Response.write "<b><a href=""/public/EventInfo.asp?id=" & strEventSQL("strEventID") & """ title=""" & strEventSQL("strEventRubrik") & """>" & strEventSQL("strEventRubrik") & "</a></b><br>" & strEventSQL("strEventDatum") & "<br><br>"
     	RSEventSQL.MoveNext
	Loop
else
	response.write "månaden tom - april<br><br>"
end if

response.write "<b>Maj</b><br><br>"
if strEventManad = "Maj" then
	do while not RSEventSQL.eof
     		Response.write "<b><a href=""/public/EventInfo.asp?id=" & strEventSQL("strEventID") & """ title=""" & strEventSQL("strEventRubrik") & """>" & strEventSQL("strEventRubrik") & "</a></b><br>" & strEventSQL("strEventDatum") & "<br><br>"
     	RSEventSQL.MoveNext
	Loop
else
	response.write "månaden tom - Maj<br><br>"
end if

	RSEventSQL.Close
	EventConnection.Close

%>
Medlem sedan juni 200032 967 inlägg
#3

Du har glömt lite citationstecken runt månadsnamnen Mars, April och Maj.

Medlem sedan mars 20023 686 inlägg
#4

uppdaterade koden nu!

Nu körs koden, men får bara fram:

Januari

månaden tom - Januari

Februari

månaden tom - februari

Mars

månaden tom - mars

April

månaden tom - april

Maj

månaden tom - Maj

Om någon har en bättre lösning för att loopa fram

	Response.write "<b><a href=""/public/EventInfo.asp?id=" & RSEventSQL("strEventID") & """ title=""" & RSEventSQL("strEventRubrik") & """>" & RSEventSQL("strEventRubrik") & "</a></b><br>" & RSEventSQL("strEventDatum") & "<br><br>"

under rätt månad baserat på strEventManad, som kan innehålla, ordet: Januari, februari, mars, april osv....

Medlem sedan juni 200032 967 inlägg
#5

Du sätter aldrig variabeln strEventManad till någonting.

I övrigt bör du helt klart loopa igenom recordsetet en gång.

<%

	Set EventConnection = Server.CreateObject("ADODB.Connection")
	EventConnection.Open "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=; DATABASE=; USER=; PASSWORD=; OPTION=3;"

	strEventSQL = "SELECT * FROM tblevenemang"
	set RSEventSQL = EventConnection.Execute (strEventSQL)

	do while not strEventSQL.eof
		if RSEventSQL("strEventManad") <> strPreviousMonth then 
			response.write "<b>" & strMonth & "</b><br><br>"
			strPreviousMonth = RSEventSQL("strEventManad")
		end if
     		Response.write "<b><a href=""/public/EventInfo.asp?id=" & RSEventSQL("strEventID") & """ title=""" & RSEventSQL("strEventRubrik") & """>" & RSEventSQL("strEventRubrik") & "</a></b><br>" & RSEventSQL("strEventDatum") & "<br><br>"
     	strEventSQL.MoveNext
	Loop

	RSEventSQL.Close
	EventConnection.Close

%>

Visserligen får du inte fram månader utan data, men det kanske är ok?

Medlem sedan mars 20023 686 inlägg
#6

Såg att jag hade missat att några strEventSQL egentligen skulle hete RSEventSQL, har markerat dessa i felstil och fungerar nu. Nu får jag fram data. Men undrar vad de markerade variablerna är för något? :q.

strEventSQL = "SELECT * FROM tblevenemang"
	set RSEventSQL = EventConnection.Execute (strEventSQL)

	do while not [B]RSEventSQL[/b].eof

		if RSEventSQL("strEventManad") <> [u]strPreviousMonth[/U] then 
			response.write "<b>" & [U]strMonth[/U] & "</b><br><br>"
			[U]strPreviousMonth[/U] = RSEventSQL("strEventManad")
		end if

     		Response.write "<a href=""/public/EventInfo.asp?id=" & RSEventSQL("strEventID") & """ title=""" & RSEventSQL("strEventRubrik") & """>" & RSEventSQL("strEventRubrik") & "</a><br>" & RSEventSQL("strEventDatum") & "<br><br>"
     	[B]RSEventSQL[/b].MoveNext
	Loop

	RSEventSQL.Close
	EventConnection.Close

Testsida för skriptet: http://www.securityfocus.se/public/event.asp

Medlem sedan juni 200032 967 inlägg
#7

Det fetstilta är ju namnet på ditt recordset. Det kan ju vara vad som helst, men det är ju det namnet du har valt.

Medlem sedan mars 20023 686 inlägg
#8

Tror att jag har grävt min egen grav med det vi diskuterade nyss, har tänkt om och skapat följande i MySQL.

Korthet: Jag vill loopa fram ett antal poster från en tabell och lägga dessa under rätt månad. Jag önskar att alla tolv månader skrivs ut och sedan läggs posterna under rätt månad. Om ingen post finns för någon månad så ska en text skrivas ut: "Inga händelser under denna månad..".

Tblevenemang
----------------------------------------
strEventID | strEventRubrik | strEventDatum | StrEventManad | strEventInfo | strEventLank
-----------------------------------------------------------------------------------------------------------
1	    datakurs		1/18/2006        1            infotext       http://adress.se
2	    matkurs		4/13/2006        4            infotext       http://adress2.se

Förklaring, strEventManad innehåller ett nummer mellan 1-12 som symboliserar Januari, februari... där 1 betyder Januari osv..

och sedan har jag skapat en tabell till som innehåller månaderna.

tblEventKat
----------------------------------------
strKatid | strEventmanadsNamn | 
-----------------------------------------------------------------------------------------------------------
1	    Januari		
2	    Februari
3	    Mars
4	    April
5	    Maj
6	    Juni
7	    Juli
8	    Augusti
9	    September
10	    Oktober
11	    November
12	    December

Jag vill på något sätt lista fram månaderna efter varandra så här och samtidigt hämta tillhörande poster från Evenemangstabellen och att dessa sorteras under rätt månad genom att jag har märkt varje post i evenemangstabellen med ett StrEventManad nummer som syftar till strKatid i den andra tabellen. :

<html>
...

<b>Januari</b><br>
<%här skrivs alla poster ut som har StrEventManad = 1 som syboliserar Januari%>
....
<b>April</b><br>
<%här skrivs alla poster ut som har StrEventManad = 4 som syboliserar April%>

...
</html>
Response.write "<a href=""/public/EventInfo.asp?id=" & RSEventSQL("strEventID") & """ title=""" & RSEventSQL("strEventRubrik") & """>" & RSEventSQL("strEventRubrik") & "</a><br>" & RSEventSQL("strEventDatum") & "<br><br>"
Medlem sedan dec. 19996 721 inlägg
#9

Sök ut data med månadstabellen som grund

SELECT k.strEventmanadsNamn,e.* FROM tblEventKat k
LEFT OUTER JOIN Tblevenemang e ON k.strKatID=e.StrEventManad order by strKatID

Då får du ut alla månader, oavsett om det finns något relaterat event eller inte. Finns det inte så kan du skriva ut det.

do while not RSEventSQL.eof

		if RSEventSQL("strEventmanadsNamn") <> strPreviousMonth then 
			response.write "<b>" & strMonth & "</b><br><br>"
			strPreviousMonth = RSEventSQL("strEventmanadsNamn")
		end if
               if isnull(RSEventSQL("strEventID")) then
                    Response.Write "inget denna månad"
               else
     		    Response.write "<a href=""/public/EventInfo.asp?id=" & RSEventSQL("strEventID") & """ title=""" & RSEventSQL("strEventRubrik") & """>" & RSEventSQL("strEventRubrik") & "</a><br>" & RSEventSQL("strEventDatum") & "<br><br>"
end if
     	RSEventSQL.MoveNext
	Loop

Namnet strKatId och StrEventManad indikerar att dessa kolumner har någon form av strängdatatyp, vilket inte är rimligt, med tanke på vad de innehåller (och för sorteringens skull). I princip är också kolumnen StrEventManad onödig, eftersom månaden finns i själva datumet.

Medlem sedan mars 20023 686 inlägg
#10

emission skrev:

Sök ut data med månadstabellen som grund

SELECT k.strEventmanadsNamn,e.* FROM tblEventKat k
LEFT OUTER JOIN Tblevenemang e ON k.strKatID=e.StrEventManad order by strKatID

Då får du ut alla månader, oavsett om det finns något relaterat event eller inte. Finns det inte så kan du skriva ut det.

do while not RSEventSQL.eof

		if RSEventSQL("strEventmanadsNamn") <> strPreviousMonth then 
			response.write "<b>" & strMonth & "</b><br><br>"
			strPreviousMonth = RSEventSQL("strEventmanadsNamn")
		end if
               if isnull(RSEventSQL("strEventID")) then
                    Response.Write "inget denna månad"
               else
     		    Response.write "<a href=""/public/EventInfo.asp?id=" & RSEventSQL("strEventID") & """ title=""" & RSEventSQL("strEventRubrik") & """>" & RSEventSQL("strEventRubrik") & "</a><br>" & RSEventSQL("strEventDatum") & "<br><br>"
end if
     	RSEventSQL.MoveNext
	Loop

Namnet strKatId och StrEventManad indikerar att dessa kolumner har någon form av strängdatatyp, vilket inte är rimligt, med tanke på vad de innehåller (och för sorteringens skull). I princip är också kolumnen StrEventManad onödig, eftersom månaden finns i själva datumet.

Då presenteras det helt rätt: http://www.securityfocus.se/public/event.asp

Men jag förstår fortfarande inte vad de fetstilta riktigt betyder?

do while not RSEventSQL.eof

		if RSEventSQL("strEventmanadsNamn") <> [b]strPreviousMonth[/b] then 
			response.write "<b>" & [b]strMonth[/b] & "</b><br><br>"
			[B]strPreviousMonth[/b] = RSEventSQL("strEventmanadsNamn")
		end if
               if isnull(RSEventSQL("strEventID")) then
                    Response.Write "inget denna månad"
               else
     		    Response.write "<a href=""/public/EventInfo.asp?id=" & RSEventSQL("strEventID") & """ title=""" & RSEventSQL("strEventRubrik") & """>" & RSEventSQL("strEventRubrik") & "</a><br>" & RSEventSQL("strEventDatum") & "<br><br>"
end if
     	RSEventSQL.MoveNext
	Loop
Medlem sedan juni 200032 967 inlägg
#11

strMonth är en miss, den glömde jag att skapa i min kod. Byt den mot RSEventSQL("strEventManadsnamn"). strPreviousmonth är bara en variabel att jämföra med för att se om det är samma månad som föregående post eller inte.

Medlem sedan mars 20023 686 inlägg
#12

Funkar prima nu! Tackar för all hjälp och ert tålamod. Borde ha vid det här laget ha lärt mig att skriva utförligt och bifoga kod/ritning så att andra förstår vad man vill uppnå.

Återigen, tack!

Ni kan nu se skriptet "In action" http://www.securityfocus.se/event/index.asp

Riktigt nöjd!

282 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
133 ms — deklarationer (db)
0 ms — hämta statistik (cache)
145 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)