webForumDet fria alternativet

Problem med att kombinera *, DISTINCT och Count(*)

9 svar · 608 visningar · startad av annesophie

annesophieMedlem sedan juni 20012 236 inlägg
#1

Jag loggar besökares aktiviteter på en webbsida (i en Access-databas) och vill kunna lista besökare (per dag och) per domän. Jag har dock bara börjat med att testa per domän och försöker just nu bara få fram unika sessionId och räkna dom.

Jag vill därför kunna välja ut distinkta sessionId, räkna samtliga distinkta sessionId för att få en besökssiffra per dag (och sedan längre ner på sidan kunna lista allt * det som tabellen innehåller, men det är steg två).

Jag får DISTINCT att funka för sig, men inte DISTINCT i kombination med COUNT(*)

Med nedan kod...

SQL = "SELECT DISTINCT sessionId FROM (SELECT COUNT(*) AS noVisitors FROM [tabellen] WHERE viaDomain = '"& domain &"');"

...får jag "Too few parameters. Expected 1"

Vad är det jag missar?

@ndersMedlem sedan juni 200032 969 inlägg
#2

Jag vet inte om jag förstår din fråga rätt, men:

SQL = "SELECT DISTINCT sessionId, (SELECT COUNT(*) AS noVisitors FROM [tabellen] WHERE viaDomain = '"& domain &"')  FROM [tabellen] WHERE viaDomain = '"& domain &"'"

Om man tolkar din fråga så står det typ:

Hämta fältet sessionid från (7823)

- och det kan ju inte fungera.

mvh

annesophieMedlem sedan juni 20012 236 inlägg
#3

Äh, nu löste jag det. Jag fick vända på raden.

sql = "SELECT COUNT(*) FROM (SELECT DISTINCT sessionId AS noVisitors FROM [tabell] WHERE viaDomain = '"& domain &"');"
annesophieMedlem sedan juni 20012 236 inlägg
#4

@nders skrev:

- och det kan ju inte fungera.

He he, nej det gjorde det ju inte. Jag tänkte knasigt. Ibland hjälper det att posta frågan här och klura på det lite. :p

@ndersMedlem sedan juni 200032 969 inlägg
#5

Aha, det var så du menade. Då fattar jag vad du var ute efter i alla fall - jag kanske läste lite kladdigt. :)

annesophieMedlem sedan juni 20012 236 inlägg
#6

Men alltså...om jag nu vill kunna få fram ALLT, *, som finns i min tabell (inte så många saker men bla IP, lang) hur gör jag då för att kombinera detta med ovan?

Jag försökte nu anropa rs("sessionId") i en loop längre ner på sidan för att se om det funkade men, det gjorde det inte.

Item cannot be found in the collection corresponding to the requested name or ordinal.

Lägger man bara till ännu en SELECT (fast då SELECT *) med paranteser i frågan?

*fundersam*

@ndersMedlem sedan juni 200032 969 inlägg
#7

Du har ju bara hämtat ut ett antal (som du dessutom inte gett något namn - så du kan bara komma åt den med rs(0).)

sql = "SELECT *, (SELECT COUNT(*) FROM (SELECT DISTINCT sessionId AS noVisitors FROM [tabell] WHERE viaDomain = '"& domain &"')) AS Antal FROM [tabell] WHERE viaDomain = '"& domain &"'"

men frågan är om det inte är bättre att ställa två frågor.

annesophieMedlem sedan juni 20012 236 inlägg
#8

@nders skrev:

sql = "SELECT *, (SELECT COUNT(*) FROM (SELECT DISTINCT sessionId AS noVisitors FROM [tabell] WHERE viaDomain = '"& domain &"')) AS Antal FROM [tabell] WHERE viaDomain = '"& domain &"'"QUOTE]

Tack, testade detta MEN då är sessionId inte distinct längre.
Loopade upp detta och fick då:

543906681
543906687
543906693
543906693
543906693
543906947
543906960
543906964
543906964
543906964
543906964
543906964
543906964

@ndersMedlem sedan juni 200032 969 inlägg
#9

Du ville ju hämta allt i din tabell?

Vad vill du egentligen hämta ut?

annesophieMedlem sedan juni 20012 236 inlägg
#10

OK, missförstånd uppenbarligen.

I min tabell finns information som ser ut ungefär såhär:

www.domänen.se 81651469 62.119.248.50 /contact.asp 2007-09-26 10:04:57 sv
www.domänen.se 81651469 62.119.248.50 /products.asp 2007-09-26 10:05:01 sv
www.domänen.info 81651541 136.8.152.13 /default.asp 2007-09-26 10:19:30 sv
www.domänen.info 81651541 136.8.152.13 /contact.asp 2007-09-26 10:20:10 sv
www.domänen.no 81651544 58.247.148.217 /search.asp 2007-09-26 10:21:19 no

5 rader har registrerats i tabellen, men det är ju egentligen bara 3 besökare.

Jag kan idag presentera informationen såhär:

- 2007-09-26: Visitor 81651469 (IP 62.119.248.50) entered via www.domänen.se
10:04:57 /contact.asp
10:05:01 /products.asp

- 2007-09-26: Visitor 81651541 (IP 136.8.152.13) entered via www.domänen.info
10:19:30 /default.asp
10:20:10 /contact.asp

- 2007-09-26: Visitor 81651544 (IP 58.247.148.217) entered via www.domänen.no
10:21:19 /search.asp

Önskemål:
Jag vill kunna känna av att det är just 3 besökare (distinct och count) fastän det är 5 rader, skriva ut detta OCH sedan kunna loopa upp samtlig ovan information (på ett ungefär) med en och samma SQL-fråga.

Jag kan ju få det att funka genom två frågor, men det måste väl gå med en?

129 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)