Avatar billede lsolesen Nybegynder
04. februar 2002 - 20:17 Der er 13 kommentarer og
1 løsning

Vælge på baggrund af udregning

Jeg har en Accessdatabase, der holder styr på, hvor mange gange, der er klikket på mine sider på min hjemmeside. Hvert klik bliver registreret. Nu er alle siderne imidlertid ikke uploadet på samme tid, så nogen sider har større mulighed for at få klik. Da jeg gerne vil have en liste over de mest populære sider, vil jeg sortere siderne på baggrund af en udregning i min sql-sætning. I stedet for at sortere efter totale antal klik, skal den sortere efter klik pr. dag.

Jeg har forsøgt med flg. sql-variationer uden held:

'SQL = "SELECT top 5 * FROM tblHitCount where page <> '/index.asp' and page <> '/tricks/default.asp' Order by [Reset_Counter] / DATEDIFF(dd, [Reset_Date], " &date& ")  DESC"
SQL = "SELECT top 5 * FROM tblHitCount where page <> '/index.asp' and page <> '/tricks/default.asp' Order by [Reset_Counter] / ((Fix("&date&") - Fix([Reset_Date]))+1) DESC"
SQL = "SELECT top 5 page,reset_counter,reset_Date, "&date&"-[reset_date]+1 AS dage, [reset_counter]/[dage] AS ugehits FROM tblHitCount where page <> '/index.asp' and page <> '/tricks/default.asp' Order by [Ugehits] DESC"

Kan du hjælpe? Det hele er lavet i ASP!

Avatar billede sunezapa Nybegynder
06. februar 2002 - 00:39 #1
prøv med ændringer: DATEDIFF("d",...  og  &now()& 
altså med kun eet d OG i anførselstegn (i ASP bliver det så DATEDIFF(""d"", ...
og now()  istedetfor date
Avatar billede lsolesen Nybegynder
08. februar 2002 - 08:37 #2
sunezapa > Med dit forslag:

SQL = "SELECT top 5 * FROM tblHitCount where page <> '/index.asp' and page <> '/tricks/default.asp' Order by [Reset_Counter] / DATEDIFF(""d"", [Reset_Date], "&now&") DESC"

får jeg flg. fejlmeddelelse:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression '[Reset_Counter] / DATEDIFF([d], [Reset_Date], 2/8/2002 8:19:17 AM)'.

Hvis jeg bruger date i stedet for now får jeg følg.:

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
Avatar billede sunezapa Nybegynder
08. februar 2002 - 09:00 #3
Jeg ved ikke om det lige er denne detalje,
men prøv lige "&now()&"  istedet for "&now&".

Ellers må jeg til at prøve det i access... :-)
Avatar billede lsolesen Nybegynder
08. februar 2002 - 09:50 #4
Stadig:
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression '[Reset_Counter] / DATEDIFF([d], [Reset_Date], 2/8/2002 9:33:56 AM)'.

Med flg.:
SQL = "SELECT top 5 * FROM tblHitCount where page <> '/index.asp' and page <> '/tricks/default.asp' Order by [Reset_Counter] / DATEDIFF(""d"", [Reset_Date], "&now()&") DESC"
Avatar billede sunezapa Nybegynder
08. februar 2002 - 12:01 #5
og bare for at udelukke alt-muligt-andet så prøv
SQL = "SELECT * FROM tblHitCount Order by DATEDIFF(""d"", [Reset_Date], "&now()&") "

? jeg går ud fra at [Reset_Date] giver en gyldig date...?
Avatar billede lsolesen Nybegynder
08. februar 2002 - 12:36 #6
Altså jeg kan godt uden for sql-sætningen lave udregningen med flg. kode:
dato = rs("Reset_Date")
forskel= datediff("ww", dato, date)
if forskel = 0 then forskel = 1 end if
counter = rs("Reset_Counter")
ugehits = counter/forskel
ugehits = FormatNumber(ugehits,0)

- og det virker heller ikke, hvis
SQL = "SELECT top 5 * FROM tblHitCount Order by DATEDIFF(""ww"", [Reset_Date], "&date()&")"

- den kan godt
SQL = "SELECT top 5 * FROM tblHitCount Order by [Reset_Date]"

Så jeg går ud fra, at Reset_Date er et gyldigt date-felt (det er det i hvert fald stillet til i databasen).
Avatar billede sunezapa Nybegynder
08. februar 2002 - 13:01 #7
ja, men jeg vil gerne kigge på det en af dagene,
hvis ikke du eller en anden har fået løst det,
nu må jeg ud af døren... :-)
Avatar billede sunezapa Nybegynder
10. februar 2002 - 09:57 #8
"ORDER BY [reset_counter]/DateDiff("d",[reset_date],Date());"
virker i min access.

hvis det ikke vil,
så er det "ORDER BY [reset_counter]/DateDiff("d";[reset_date];Date());"

afhængig af sprogversion af access kan der være forskelle i syntaksen, så der er "," istedetfor ";" til adskillelse af parametre i funktioner (her: DATEDIFF). kan det være dette?

Hvis jeg skal teste drilagtige SQL'er,
så laver jeg dem i en query i access,
og klipper SQL'en herfra.
Avatar billede nih Novice
10. februar 2002 - 10:36 #9
sunezapa ->
forskellen i ',' og ';' er:

Du skal bruge ',' når du skriver SQL sætningen direkte.

Du skal bruge ';' når du skriver i forespørgselsgitteret, så oversætter Access ';'érne til ','ér

Niels
Avatar billede lsolesen Nybegynder
10. februar 2002 - 13:48 #10
Den giver stadig:
Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

Og fejlen ligger i min SQL:

SQL = "SELECT top 5 page,reset_counter,reset_date FROM tblHitCount ORDER BY [reset_counter]/DateDiff(""d"",CDate([reset_date]),Date());"

Hvor jeg for at sikre mig, at reset_date er ordentlig dato har lavet en CDate (den virker heller ikke uden denne tilføjelse).
Avatar billede sunezapa Nybegynder
13. februar 2002 - 15:07 #11
nu er jeg i meterdyb sne i Norge,
men kigger lige lidt mail,
og her er næste fejl-findings-step:
EFTER SQL-sætningen, så skriv "Response.write SQL"
og evt. en linie mere "Response.end",
og klip resultatet hertil i en kommentar :-)
Måske ser du selv noget, som ikke er, som det burde være...

PS. Virker det i Access-forespørgsel...?
Avatar billede lsolesen Nybegynder
14. februar 2002 - 21:19 #12
SELECT top 5 * FROM tblHitCount ORDER BY [reset_counter]/DateDiff("d",[reset_date],2/14/2002)

Dette er sql'en udskrevet med response.write - jeg ser ikke noget, der burde være anderledes, men den giver stadig:

Too few parameters. Expected 1.
Avatar billede sunezapa Nybegynder
23. februar 2002 - 17:57 #13
Prøv følgende:
Start Access
Klik "Forespørgsel"
DobbeltKlik Opret en forespørgsel i designvisning"
Klik "Luk"
Klik på "SQL" under menuen "filer"
Erstat "Select;" med følgende 3 linier:

SELECT TOP 15 *
FROM tblHitCount
ORDER BY [reset_counter]/DateDiff("d",[reset_date],Date());

Klik på det røde udråbstegn i toolbaren
Se resultat - er der de 15 mest besøgte sider?
(jeg får det stadig ikke til IKKE at virke...)
Avatar billede lsolesen Nybegynder
23. februar 2002 - 20:00 #14
Jeg kan godt få det til at virke i ASP nu - tak for det. Jeg kan imidlertid stadig ikke få min SQL i ASP til at makke ret. Jeg har dog løst problemet ved bare at vælge fra forspørgslen lavet i Access-databasen, så det hele fungerer som det skal nu. Tak for hjælpen - og tålmodigheden.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester