Just nu i M3-nätverket
Jump to content

välja inlägg efter årtal


Siluett

Recommended Posts

om jag vill välja alla inlägg från år 2007, då vill jag skriva ex:

 

SQL = "SELECT * FROM aktuellt WHERE datum = '2007' ORDER BY id desc"

 

 

men det går ju inte....

 

hur anger man för att välja inläggen från 2007-01-01 till 2007-12-31???

 

Link to comment
Share on other sites

Det beror på vilken databas du använder. Normalt använder du dock

SQL = "SELECT * FROM aktuellt WHERE YEAR(datum) = 2007 ORDER BY id desc"

 

Link to comment
Share on other sites

En fundering till. Mina hjärnceller räcker inte till.... :-)

 

på sidan har jag nu alla inlägg från 2007. längst ner vill jag ha en länk till alla inlägg från 2006, och en till de från 2005. But how!!?

 

Link to comment
Share on other sites

Det kan du ju göra i en for-loop där du stegar neråt så många steg(år) ifrån det år du vill.

I loopen skriver du ut länkarna med en "års-parameter", såklart ;)

 

Link to comment
Share on other sites

Nu har jag gjort ett försök :-) kanske inte som du hade tänkt i ditt förslag (:)) men det är vad jag kunde åstadkomma!

 

fråga, varför ser men inget!!!

 

<%
URL                 = "/aktuellt/aktuellt.asp"                    
db = Server.MapPath("/aktuellt/aktuellt.mdb")   ' Databasens sökväg
%>


<%Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & db

If Request.QueryString("year") = "2007" OR Request.QueryString("year") = "2006" OR Request.QueryString("year") = "2005" OR Request.QueryString("year") = "2004" OR Request.QueryString("year") = "2003" Then

Set RecSet = Server.CreateObject("ADODB.Recordset") 

If Request.QueryString("year") = "2007" Then 
Addera = "SELECT * FROM aktuellt WHERE YEAR(datum) = '2007' ORDER BY id desc"

ElseIf Request.QueryString("year") = "2006" Then 
Addera = "SELECT * FROM aktuellt WHERE YEAR(datum) = '2006' ORDER BY id desc"

ElseIf Request.QueryString("year") = "2005" Then 
Addera = "SELECT * FROM aktuellt WHERE YEAR(datum) = '2005' ORDER BY id desc"

ElseIf Request.QueryString("year") = "2004" Then 
Addera = "SELECT * FROM aktuellt WHERE YEAR(datum) = '2004' ORDER BY id desc"

ElseIf Request.QueryString("year") = "2003" Then 
Addera = "SELECT * FROM aktuellt WHERE YEAR(datum) = '2003' ORDER BY id desc"

End If

RecSet. Open Addera, Connect, adOpenStatic, adOptimistic %>

Se vad som hände år:

<% Do Until RecSet.EOF 

Response.Write "<b>»</b> <a href=aktuellt.asp?do=visa?datum=" & RecSet("2007") & ">" & (RecSet("2007")) & "</a> <br>"
Response.Write "<b>»</b> <a href=aktuellt.asp?do=visa?datum=" & RecSet("2006") & ">" & (RecSet("2006")) & "</a> <br>"
Response.Write "<b>»</b> <a href=aktuellt.asp?do=visa?datum=" & RecSet("2005") & ">" & (RecSet("2005")) & "</a> <br>"
Response.Write "<b>»</b> <a href=aktuellt.asp?do=visa?datum=" & RecSet("2004") & ">" & (RecSet("2004")) & "</a> <br>"
Response.Write "<b>»</b> <a href=aktuellt.asp?do=visa?datum=" & RecSet("2003") & ">" & (RecSet("2003")) & "</a> <br>"

RecSet.MoveNext
Loop
RecSet.Close

Connect.Close

End If%>

 

Link to comment
Share on other sites

Inte riktigt så jag tänkte :)

 

Kolla QueryString("datum") med Case-satser för dem år du vill ska gälla och lägg in värdet i en variabel(strYear). Sist i Case-satserna använder du:

Case Else

strYear=2007

Annars kollar man bara att QueryString innehåller ett värde och är det ett talvärde lägger man det i variabeln annars ska variabeln innehålla ett grundtal(år).

 

Använd sen variabeln i din SELECT-fråga:

Addera = "SELECT * FROM aktuellt WHERE YEAR(datum) = "& strYear &" ORDER BY id desc"

Varför kallar du din Select-fråga för Addera? Vad är det du ska addera ;)

 

For-loop(varför blandar du in RecSet(åren) här?):

For i=1 To 5
Response.Write("<a href=aktuellt.asp?do=visa?datum="& Year(Date)-i &">"& Year(Date)-i &"</a><br />")
Next

[inlägget ändrat 2008-02-18 12:09:44 av Micke_skane]

Link to comment
Share on other sites

Åh, det där... :-) det är en liten blandning av andra funktioner som jag har, och lite från webstudio :-) Jag kan väl bara det här språket grovt egetnligen. Vad betyder Addera då? trodde det inte hade så stor betydelse vad jag hade för ord där...

 

nåja, ett nytt försök. återigen med en blandning av dina tips, mina bristfälliga kunskaper, och andra funktioner som jag hade. :-)

 

<%
URL                 = "/aktuellt/aktuellt.asp"                    
db = Server.MapPath("/aktuellt/aktuellt.mdb")   ' Databasens sökväg
%>


<%Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & db

Set RecSet = Server.CreateObject("ADODB.Recordset") 

Select Case Request.QueryString("datum")
Case "2003" sql_datum = "2003"
Case "2004" sql_datum = "2004"	
Case "2005" sql_datum = "2005"
Case "2006" sql_datum = "2006"
Case "2007" sql_datum = "2007"

End Select

SQL = "SELECT * FROM aktuellt WHERE YEAR(datum) = '" & sql_datum & "' ORDER BY id desc"
RecSet.Open SQL, Conn %>


Se vad som hände år:

<% Do Until RecSet.EOF 

For i=1 To 5 

Response.Write ("<b>»</b> <a href=aktuellt.asp?do=visa?datum=" & sql_datum(Date)-i & ">" & sql_datum(Date)-i & "</a> <br>")

Next

RecSet.Close
Connect.Close
%>

 

men detta blev jättefel. blir bara en error-sida...

 

Link to comment
Share on other sites

Select Case Request.QueryString("datum")
Case "2003" 
sql_datum = 2003
Case "2004"
sql_datum = 2004
Case "2005"
sql_datum = 2005
Case "2006"
sql_datum = 2006
Case "2007"
sql_datum = 2007
Case Else
sql_datum = 2007	
End Select

Sen beror det på hur du lagrat årtalet i databasen och vilken datatyp där är på kolumnen.

Är det textform: '"& sql_datum &"'

Är det talform: "& sql_datum &"

 

Du ska inte lägga in For-loopen i en Do Until-loop.

Någon anledning/tanke med att du gjort så?

Vidare ska For-loopen se ut som jag visade, varför använder du sql_datum-värdet här?

 

Vilket ord du döper dina saker till har ingen teknisk betydelse men det är lättare att förstå vad koden gör om man namnger sakerna "korrekt".

Tänk om det handlar om att hämta ut namn ur en databas, vilket är då mest lämpligt att använda ;)

Get_Name="SELECT..."

Cykelslang="SELECT..."

 

[inlägget ändrat 2008-02-18 16:25:53 av Micke_skane]

Link to comment
Share on other sites

Inte för att vara petig, men skriv med fördel (färre rader men fortfarande läsbart) ihop select-satsen på följande sätt:

sDatum=Request.QueryString("datum")
Select Case sDatum
   Case "2003","2004","2005","2006","2007"
        sql_datum=CInt(sDatum) 
   Case Else
        sql_datum = 2007	
End Select

 

Link to comment
Share on other sites

aha det är skillnad på ' och inte ' ja :-)

 

 

jag fattade inte riktigt varför jag ska använda "& Year(Date)-i &"

var kommer Date ifrån? och varför heter det minus i?

 

nej, ingen tanke bakom for i do until :-)

 

tack för hjälpen!

(men jag återkommer väl med fler frågor snart...)

 

Link to comment
Share on other sites

som sagt, fler frågor.

 

jo, det fungerar. men bara "för sig själv". när jag har funktionen på en egen sida fungerar denna länkningen. bra! men när jag trycker på länkarna kommer jag ändå bara till 2008 års inlägg. kan det ha något att göra med att jag har WHERE YEAR(datum) = '2008' längst upp i urvalet på sidan?

om jag tar bort det så kommer ju återigen alla inlägg med på sidan. där vill jag ju bara ha de från 2008 (fungerar med WHERE YEAR(datum) = '2008' men då fungerar ju inte länkningen till gamla inlägg)

 

 

 

<%
URL                 = "/aktuellt/aktuellt.asp"                    
db = Server.MapPath("/aktuellt/aktuellt.mdb")   ' Databasens sökväg

%>

<link rel="stylesheet" href="/style.css" type="text/css">

<table cellpadding="1" cellspacing="0" width="100%" border="0">

<%Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & db

If Request.QueryString("ID") = "" Then

Set RecSet = Server.CreateObject("ADODB.Recordset")
Sidan = Request.QueryString("sida")
If Sidan = "" then 
    sida = 1 
Else 
    sida = Sidan 
End If 

With RecSet
   .CursorLocation = 3
   .CacheSize = NyhetPerSida
End With

SQL = "SELECT * FROM aktuellt WHERE YEAR(datum) = '2008' ORDER BY id desc"
RecSet.Open SQL, Conn

If RecSet.EOF Then%>
    <tr>
       <td>Inga nyheter inlagda!</td>
    </tr>
<%Else

With RecSet
 .MoveFirst 
 .PageSize = NyhetPerSida
 .AbsolutePage = sida
End With

Sidor =  RecSet.PageCount
x = 0 
Do While Not RecSet.EOF And x < RecSet.PageSize%>
  <tr>
     <td width="94%"><b><%=RecSet("rubrik")%></b> | <%=FormatDateTime(RecSet("datum"),2)%></td>
  </tr>
  <tr>
     <td valign="top" colspan="2"><%=RecSet("nyhet")%></td>
  </tr>

  <tr height="20">
      <td colspan="2">&nbsp;</td>
  </tr>
<%x=x+1 
RecSet.MoveNext
Loop
RecSet.Close
If Sidor > 1 Then%>
 <tr>
    <td valign="top" colspan="2">
      <%For Sid = 1 To Sidor
              If (Int(Sid)) = (Int(sida)) Then%><b><%=Sid%></b><%Else%> <a href="<%=URL%>?sida=<%=Sid%>"><%=Sid%></a> <%End If
        Next%> 
   </td>
 </tr>
<%End If
 End If
End If
If Request.QueryString("ID") <> "" Then
Set RS=Conn.Execute("Select * From aktuellt Where id=" & Request.QueryString("ID"))%>
    <td colspan="2"> <b><%=RS("rubrik")%></b> | <%=FormatDateTime(RS("datum"),2)%></td>
    </tr>
    <tr>
       <td colspan="2"><%=Replace(RS("nyhet"),vbCrLf,"<br>")%></td>
    </tr><tr>
<%If RS("bild") <> "" Then%>
<td valign="top"><img src="<%=RS("bild")%>" border="1"></td>
<%End If%>


<%
sDatum=Request.QueryString("datum")
Select Case sDatum
Case "2003", "2004", "2005", "2006", "2007", "2008"
	sql_datum=CInt(sDatum)
Case Else
	sql_datum = 2008
End Select

SQL = "SELECT * FROM aktuellt WHERE YEAR(datum) = '" & sql_datum & "' ORDER BY id desc"
RecSet.Open SQL, Conn %>


Se vad som hände år:

<%
For i=1 To 5

Response.Write("<a href=aktuellt.asp?do=visa?datum="& Year(Date)-i &">"& Year(Date)-i &"</a><br>")

Next
%>

 

Link to comment
Share on other sites

Orkade inte kolla All kod men är det tänkt att om man inte skickar med ett årtal som prarameter i länken är det 2008 som gäller.

Klickar man på någon av länkarna tillhörande något av åren 2007, 2006, 2005, 2004, 2003 så är det det året som gäller i din SELECT-fråga.

 

Vad använder du querystring-variabeln do någonstans?

 

Sen är där ett fel i länkarna:

do=visa?datum -> do=visa&datum

 

Link to comment
Share on other sites

ok, nu har jag rättat till en del.

 

välja-årtal filen är inkluderad och ser bra ut. problemet nu är att fortfarande visas alla inlägg, det kvittar vilket år jag väljer.

 

kan det ha ngt att göra med att inläggens datum står såhär 2008-02-08 08:20:06 (eller utan tid) i databasen?

länken plockar alltså inte ut alla från det specifika året.....

 

Link to comment
Share on other sites

SQL="SELECT * FROM aktuellt WHERE YEAR(datum) = '"&request.querystring("datum")&"' "

 

Jag har inte varit med i diskussionen men ser din sqlsträng ut så här?

 

 

Link to comment
Share on other sites

hej!

 

 

nej, inte riktigt. såhär:

SQL = "SELECT * FROM aktuellt WHERE YEAR(datum) = '" & sql_datum & "' ORDER BY id desc"

 

 

jag provade att ändra sql_datum både till sDatum och Request.Querystring("datum") (dessa båda är väl iof samma sak...) men inget nytt händer...

 

Link to comment
Share on other sites

 

Ingen som har någon bra idée om varför jag inte får det att fungera??

Troligtvis innehåller Request.Querystring("datum") inte enbart ett årtal utan kanske hela datumet?

 

Link to comment
Share on other sites

Ok, det har jag gjort. nu ser det ut såhär:

 

Response.Write("<a href=aktuellt.asp?datum="& Year(Request.QueryString("datum"))-i &">"& Year(Request.QueryString("datum"))-i &"</a><br>")

 

 

VET du vad som händer då???? :-) Jo, då får jag nya årtal!! Istället för 2007, 2006, 2005, 2004 och 2003 får jag 1904, 1903, 1902, 1901 och 1900.....

wonder why?? :-)

 

Link to comment
Share on other sites

Jaha... det format jag har är ex 2008-02-18 (och på vissa inlägg finns också tid angiven ex 14:36:06)

 

Annars vet jag inte vad du menar för format?

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...