Jobbar med ett litet statistik script till min community. Jag har gjort ett diagram för att visa antal inloggningar de 10 senaste dagarna. Problemet jag har är att jag inte lyckas räkna de olika inloggningarna per dag.
Så här ser koden ut där jag räknar logins:
set count = connect.execute("SELECT Count(*) AS logins1 FROM logins WHERE logindate = '" & DatePart("d",date) & "'")
logins1 = count("logins1")
set count = connect.execute("SELECT Count(*) AS logins2 FROM logins WHERE logindate = '" & DatePart("d",-1,now()) & "'")
logins2 = count("logins2")
Är det inte så man använder DatePart? Har testat med DataAdd men det fungerar tyvärr inte häller.
edit: logindate innehåller ett Now() datum. Använder mySQL.
Som JesperT skrev: Nej, det är inte så man använder DatePart(). Kontrollera alltid hur din färdiga SQL-fråga ser ut med en utskrift, så ser du att värden inte blir som du önskar. Hur är datumen lagrade? Som rena datum, eller som datum-tidvärden? Är det datumfält i tabellen?
Får det inte att fungera. Sparar datumen i Now() format i en kolum som har typen DATETIME.
Har inte en aning om varför det inte fungerar. tycker ju att det borde göra det.
Om jag gör så här får jag fram nått iaf:
WHERE logindate > '" & DateAdd("d", -1, Now()) & "'")
Problemet är att du använder now när du lagrar data. now() innefattar även tid så det blir aldrig lika när du bara jämför med ett datum.
set count = connect.execute("SELECT Count(*) AS logins2 " & _
" FROM logins " &_
" WHERE to_days(current_date) - to_days(logindate) between 0 and 1 " & _
" group by to_days(logindate) "
" order by to_days(logindate) "
Så får du båda värdena i samma fråga ordnade med värdet för gårdagen först. Om du bara vill lagra datumet så är det bättre att använda funktionen current_date i SQL.
Tack så mycket. Fungerar fint.
Men som vanligt har jag en fråga till
Någon som vet hur jag ska göra för att få fram den dagen som det gjordes flest inloggningar samt antalet. Datumet är ett plus i kanten, det viktiga är antalet.
Problemet är att i tabellen som heter logins har jag bara sparat: Id och datumet. Jag skulle vilja få fram den dagen som har flest inloggningar.
Har testat lite med denna kod:
SQL = "select count(*) as antal, logindate from logins group by logindate order by 1 DESC"
rs.Open SQL, Connect, 1, 2
if not rs.eof then
response.write ""&rs("logindate")&": "&rs("antal")&"."
end if
rs.close
Om man använder sig av den sqg-fråga du har och sorterar på antalet då? Kan det fungera? (Jag har ingen aning...)
set count = connect.execute("SELECT Count(*) AS logins2 " & _
" FROM logins " &_
" WHERE to_days(current_date) - to_days(logindate) between 0 and 1 " & _
" group by to_days(logindate) "
" order by logins2 "
Set Connect = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
Connect.Open "driver=MySQL;server=localhost;uid=wiklund;pwd=jadu;database=es;option=16384"
SQL = connect.execute("SELECT Count(*) AS logins2 FROM logins WHERE to_days(current_date) - to_days(logindate) between 0 and 1 group by to_days(logindate) order by logins2")
rs.Open SQL, Connect, 1, 2
if not rs.eof then
response.write ""&rs("logindate")&": "&rs("logins2")&"."
end if
rs.close
connect.close
Det har nog inte med saken att göra, men till att börja med har du inget fält som heter logindate i recordsetet rs. Ta bort det ur utskriften.
I övrigt, detta borde fungera:
Set Connect = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
Connect.Open "driver=MySQL;server=localhost;uid=wiklund;pwd=jadu;database=es;option=16384"
SQL = "SELECT Count(*) AS logins2 FROM logins WHERE to_days(current_date) - to_days(logindate) between 0 and 1 group by to_days(logindate) order by logins2"
rs.Open SQL, Connect, 1, 2
if not rs.eof then
response.write rs("logins2")
end if
rs.close
connect.close
Du kommer nog få något nytt felmeddelande nu, jag är lite osäker på vad du vill ha ut av SQL-frågan.
Skjuter vilt från höften, antingen skriver du, sql-raden:
SQL = "SELECT Count(*) AS logins2 FROM logins WHERE to_days(current_date) - to_days(logindate) between 0 and 1 group by to_days(logindate) order by logins2 desc"
Eller så här: (ev. lägg till desc)
Set Connect = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
Connect.Open " driver=MySQL;server=localhost;uid=wiklund;pwd=jadu;database=
es;option=16384"
SQL = "SELECT Count(*) AS logins2, logindate FROM logins WHERE to_days(current_date) - to_days(logindate) between 0 and 1 group by to_days(logindate) order by logins2"
rs.Open SQL, Connect, 1, 2
if not rs.eof then
response.write rs("logins2")
end if
rs.close
connect.close
Där borde du väl även kunna plocka ut logindate...
262 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91