webForumDet fria alternativet

Plocka ut saker ur databasen baserat på datum

ASP

12 svar · 294 visningar · startad av Känning

Medlem sedan jan. 2003252 inlägg
Frågan#1

Jag har en databas där jag lagrar spel.

Nu vill jag sammanställa en statistiksida och det går hyffsat tills jag blandar in datum :(

Jag vill tex ha ut hur många spel vi spelat varje månad, dvs.

Jan 192
Feb 202
osv.

Sedan skulle jag gärna vilka ha ut resultat också. Det vill säga hur det har gått varje månad. Så egentligen så vill jag att det ska se ut så här:

Jan 192 spel, +2000kr
Feb 202 spel, + 5000 kr
osv.

jag har en accessdatabas och värdet är "datum/tid"

kan någon hjälpa mig att få igång lite tankesätt här med sql-satser

Medlem sedan dec. 200012 464 inlägg
#2
select monthname(month(spelDatum)) as månad, 
year(spelDatum) as år, count(*) as spel,
sum(resultat) as förlust
from spel
group by 1,2

Det är mer relevant att se tabelldefinitionen, nu måste jag gissa vilka namn du har använt.

Medlem sedan jan. 2003252 inlägg
#3

LarsG, vad skulle man göra utan dig? :)

Tabellen ser ut så här:

id | räknare
datum | datum/tid
match | text
insats | tal
vinst | tal

Så jag vill alltså addera alla insatser och alla vinster och sedan få ut skillnaden mellan dessa under jan-månad och sedan feb osv.

Tänk på att jag är grym nybörjare, men jag blir bättre och bättre för varje dag ;)

Medlem sedan dec. 200012 464 inlägg
#4

Ok, om vinst inte är inklusive insats. Du får ändra tabellnamnet och sedan finns det säkert något fel i utskriften.

<%
dim connect,rs,q
set connect = server.creatobject("adodb.connection")
connect.open "DSN"
q = "select monthname(month(datum)) as månad, " & _
" year(datum) as år, count(*) as spel, " & _
" sum(vinst - insats) as resultat " & _
" from spel " & _
" group by 1,2 "
'
'Vad heter tabellen?
'
%>
<table>
<tr> <td>År </td> <td> Månad </td> <td> Antal </td> 
<td> Resultat </td> </tr>
<%
set rs = connect.execute(q)
while  not rs.eof 
%>
  <tr><td> <%= rs(1) %> </td> <td><% =rs(0) %> </td>
        <td> <% = rs(2) %> </td><td> <% = rs(3) %> </td></tr>
<% 
 rs.movenext
wend
%> 
</table>
<%
rs.close
set rs = nothing
connect.close
set connect = nothing
%>
Medlem sedan jan. 2003252 inlägg
#5

Fan, bruden tvingar med mig på bio (kärleksaffär på manhattan eller vad den heter, verkar vara bra manus till den).

Jag får kika på detta när jag kommer hem eller imorgon, men tack för all hjälp så här långt.

:D

Medlem sedan jan. 2003252 inlägg
#6

Hmm, jag testade att lägga in den koden jag fick av dig, databasen kallar jag för spel :S och tabellen för spel. Svårgissat :)

(men den ligger iaf så man inte kan ladda ner den)

Jag skrev in det som du gav mig och la till sökvägen till min databas, men det funkar inte, fick felmeddelande:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Odefinierad funktion 'monthname' i uttryck.
/spel/test_stat.asp, line 25

<%
dim connect,rs,q
set connect = server.createobject("adodb.connection")
connect.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("spel.mdb")&";"

q = "select monthname(month(datum)) as månad, " & _
" year(datum) as år, count(*) as spel, " & _
" sum(vinst - insats) as resultat " & _
" from spel " & _
" group by 1,2 "

%>
<table>
<tr> <td>År </td> <td> Månad </td> <td> Antal </td>
<td> Resultat </td> </tr>
<%
'Detta är rad 24
set rs = connect.execute(q)
while not rs.eof
%>
<tr><td> <%= rs(1) %> </td> <td><% =rs(0) %> </td>
<td> <% = rs(2) %> </td><td> <% = rs(3) %> </td></tr>
<%
rs.movenext
wend
%>
</table>
<%
rs.close
set rs = nothing
connect.close
set connect = nothing
%>

Vad kan vara fel?

Medlem sedan jan. 2003252 inlägg
#7

Shyssta LarsG hjälp mig :)

Vad kan det vara som är fel?

Medlem sedan dec. 200012 464 inlägg
#8

Jag blandade ihop lite, monthname finns tydligen bara i VB

q = "select month(datum) as månad, " & _
" year(datum) as år, count(*) as spel, " & _
" sum(vinst - insats) as resultat " & _
" from spel " & _
" group by 1,2 "

så du får hantera det i utskriften istället

 <tr><td> <%= rs(1) %> </td> <td><% =monthname(cint(rs(0))) %> </td>
<td> <% = rs(2) %> </td><td> <% = rs(3) %> </td></tr>
Medlem sedan jan. 2003252 inlägg
#9

Jag måste vara trög, men nu ser min kod ut så här, men det funkar inte, felmeddelande:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Du försökte köra en fråga med en mängdfunktion som inte innehöll det angivna uttrycket 'month(datum)'.
/spel/test_stat.asp, line 26

<%
dim connect,rs,q
set connect = server.createobject("adodb.connection")
connect.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("spel.mdb")&";"

q = "select month(datum) as månad, " & _
" year(datum) as år, count(*) as spel, " & _
" sum(vinst - insats) as resultat " & _
" from spel " & _
" group by 1,2 "

%>
<table>
<tr> <td>År </td> <td> Månad </td> <td> Antal </td>
<td> Resultat </td> </tr>
<%
'detta är rad 25
set rs = connect.execute(q)
while not rs.eof
%>
<tr><td> <%= rs(1) %> </td> <td><% =monthname(cint(rs(0))) %> </td>
<td> <% = rs(2) %> </td><td> <% = rs(3) %> </td></tr>

<%
rs.movenext
wend
%>
</table>
<%
rs.close
set rs = nothing
connect.close
set connect = nothing
%>

En annan fråga, rs(1) och rs(0), var kommer de ifrån och hur tilldelas de värdet.

Medlem sedan aug. 20012 349 inlägg
#10

Känning skrev:

En annan fråga, rs(1) och rs(0), var kommer de ifrån och hur tilldelas de värdet.

Det är index i ditt recordset för att komma åt de olika svarskolumnerna.

select id, datum, match from spel

då kan du hämta ut id ur ditt recordset antingen med
rs("id")
eller så kan du skriva
rs(0)
eftersom id kommer först i din select sats får det index 0, datum har index 1 och match har index 2.

Om man skriver en select sats som inte söker ut en viss kolumn utan tex räknar antalet rader är det rätt praktiskt att kunna komma åt svaret

ex:
select count(*) from spel
nu kan du får ut svaret på count(*) i ditt rs genom att skriva rs(0)

Det finns ett annat sätt med, du kan namnge din kolumn i ditt rs om du vill till ett annat namn än ursprungsnamnet eller ge count(*) kolumnen ett namn

select count(*) as Antal from spel

nu kan du skriva rs("Antal") eller rs(0)

detta gäller som sagt med även för en vanlig select sats

ex:
Select id as MyId, datum as DatumHittaPaNamn from Spel
nu akn du komma åt id genom rs("MyId") eller rs(0) men inte genom rs("id").

Hoppas du hänger med.

Medlem sedan jan. 2003252 inlägg
#11

Kanon förklaring :)

Jag är med, men jag har fortfarnade problem med mitt exempel :(

Medlem sedan dec. 200012 464 inlägg
#12
q = "select month(datum) as månad, " & _
" year(datum) as år, count(*) as spel, " & _
" sum(vinst - insats) as resultat " & _
" from spel " & _
" group by month(datum), year(datum) "
Medlem sedan jan. 2003252 inlägg
#13

Tack det funkar :)

262 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)