webForumDet fria alternativet

Sortera efter tid och annat fält

Databaser & SQL

5 svar · 268 visningar · startad av SimonG

Medlem sedan maj 2000444 inlägg
Frågan#1

hej,

jag håller på med en statistik applikation och har kört fast med hur jag skall ta reda på hur länge besökaren är på sidan.

Jag loggar det unika browser id't via sessions i databasen tillsammans med tiden (datetime) samt vilken sida som besöktes.

sessions = server_sid
tiden = server_time
vilken sida = client_referrer

Men jag kan inte komma på hur jag skall få vad client_referrer är när tiden är "max" så att säga.

Följade kod ger mig enbart den första träffen i client_referrer, jag vill ha ut den sista.

SELECT DISTINCT Server_SID , client_referrer, max( server_time ) AS max_time
FROM usury_hits
WHERE user_id = '1'
GROUP BY server_sid
ORDER BY hit_id
LIMIT 0 , 30

databasen är mysql.

Medlem sedan dec. 20003 887 inlägg
#2
ORDER BY server_time DESC

möjligen?

Medlem sedan maj 2000444 inlägg
#3

Engine^ skrev:

ORDER BY server_time DESC

möjligen?

nej det hjälper inte.

resultatet på min fråga i första inlägget kan se ut såhär:

Server_SID                           client_referrer              max_time
783d843205f5eb17b5726927cba675d8 	Direct Hit  	             2005-04-24 07:16:13
d5ea2af1a295924bc17f23e7bb3a38a1 	domain.com/stats/hellow.php  2005-04-24 07:20:58
43330911c884fadf5f81c45c97de9a36 	Direct Hit 	              2005-04-24 07:23:24

men kollar jag på tex 783* server_sid och den sista client_referrern är inte "direct hit" utan domain.com/stats/helloagain.php, "direct hit" är den första.

När det inte finns någon högre tid (max_time) när den raden visas vill jag även ha det värdet som är på samma rad men från client_referrer fältet.

Medlem sedan dec. 200012 464 inlägg
#4
SELECT Server_SID , 
  client_referrer, 
server_time as max_time
FROM usury_hits uh
WHERE user_id = 1
and server_time in (
select max(server_time)
from usury_hits
where server_sid = uh.server_sid)
ORDER BY hit_id
LIMIT 0 , 30
Medlem sedan maj 2000444 inlägg
#5

LarsG skrev:

SELECT Server_SID , 
  client_referrer, 
server_time as max_time
FROM usury_hits uh
WHERE user_id = 1
and server_time in (
select max(server_time)
from usury_hits
where server_sid = uh.server_sid)
ORDER BY hit_id
LIMIT 0 , 30

Aha, subquerys var lösningen. funkar kalas. Tack Lars!

Medlem sedan maj 2000444 inlägg
#6

Frågan känns väldligt slö,

den tar ca 3 sekunder med limit 10, ca 4.5 sekunder med limit 30 och ca 5,3 sekunder med limit 50.

Går det att lösa med index på något sätt?

247 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)