Wiklund!!Medlem sedan juli 2002556 inlägg
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.
Jesper TMedlem sedan nov. 20017 058 inlägg
Det borde vara dateAdd
dateAdd("d",-1,date) : skall ge gårdagens datum
@ndersMedlem sedan juni 200026 914 inlägg
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?
Kika i VBScript-referensen så ser du hur man använder datumfunktionerna.
Engine^Medlem sedan dec. 20002 861 inlägg
set count = connect.execute("SELECT Count(*) AS logins2 FROM logins WHERE logindate = '" & DateAdd("d", -1, Now()) & "'")
logins2 = count("logins2")
Referenser är guld värda... MySQL Reference.
Wiklund!!Medlem sedan juli 2002556 inlägg
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()) & "'")
rymdknarkMedlem sedan maj 2000175 inlägg
Prova:
WHERE logindate > #" & DateAdd("d", -1, Now()) & "#")
LarsGMedlem sedan dec. 200012 465 inlägg
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.
Wiklund!!Medlem sedan juli 2002556 inlägg
Tack så mycket! Nu vet jag principen. Men om det inte finns någon post det datumet så får jag upp detta felmeddelande:
ADODB.Field (0x800A0BCD)
Antingen är BOF eller EOF satt till True, eller så har aktuell post raderats. Den begärda åtgärden kräver en aktuell post.
@ndersMedlem sedan juni 200026 914 inlägg
Ja, du måste alltid kontrollera att recordsetet inte är tomt innan du försöker använda värden (som då inte finns).
if not objRS.EOF then
' det finns data, skriv ut, eller vad du nu ska göra
else
' recordsetet är tomt, gör nåt annat
end if
mvh
Wiklund!!Medlem sedan juli 2002556 inlägg
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.
Jesper TMedlem sedan nov. 20017 058 inlägg
Nu vet jag inte vad dina kolumner heter, men min princip är denna:
"SELECT Top 1 * FROM members ORDER BY logins"
Sedan skriver du väl bara ut datumet och annat som vanligt.
Wiklund!!Medlem sedan juli 2002556 inlägg
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
solbulleMedlem sedan mars 20014 998 inlägg
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 "
Wiklund!!Medlem sedan juli 2002556 inlägg
Det är nog nått sånt man ska göra, men fick felmeddelandet:
Feltyp:
ADODB.Recordset (0x800A0BB9)
Parametrarna är felaktiga, ligger utanför tillåtet intervall eller skapar en inbördes konflikt.
@ndersMedlem sedan juni 200026 914 inlägg
Hur ser din kod ut då? Rätt namn på connection-objekt etc?
Wiklund!!Medlem sedan juli 2002556 inlägg
Hela koden:
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
Wiklund!!Medlem sedan juli 2002556 inlägg
@ndersMedlem sedan juni 200026 914 inlägg
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.
Mvh
Wiklund!!Medlem sedan juli 2002556 inlägg
Fick inget felmeddelande, men tyvärr fick jag inte rätt tal utskrivet.
Det jag vill få fram är alltså vilken dag det har gjorts flest inloggningar.
Tabbellen ser ut så här:
Id
Logindate (DATETIME)
När jag kollar förhand i databasen så är rekordet 12. Med denna kod fick jag ut 1.
solbulleMedlem sedan mars 20014 998 inlägg
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...