sql >> Database teknologi >  >> RDS >> Mysql

beregne de fleste brugere nogensinde online med MySQL

Du kan bruge MySQL-variabler til at beregne den løbende sum af aktuelt loggede besøgende og derefter få det maksimale:

SET @logged := 0;
SET @max := 0;

SELECT 
     idLoginLog, type, time,
    (@logged := @logged + IF(type, 1, -1)) as logged_users,
    (@max := GREATEST(@max, @logged))
FROM logs
ORDER BY time;

SELECT @max AS max_users_ever;

(SQL Fiddle )

Rediger: Jeg har også et forslag til, hvordan man håndterer brugere, der ikke udtrykkeligt er logget ud. Lad os sige, at du betragter en bruger som automatisk logget ud efter 30 minutter:

SET @logged := 0;
SET @max := 0;

SELECT 
     -- Same as before
     idLoginLog, type, time,
    (@logged := @logged + IF(type, 1, -1)) AS logged_users,
    (@max := GREATEST(@max, @logged)) AS max_users
FROM ( -- Select from union of logs and records added for users not explicitely logged-out
  SELECT * from logs
  UNION
  SELECT 0 AS idLoginnLog, l1.username, ADDTIME(l1.time, '0:30:0') AS time, 0 AS type
  FROM -- Join condition matches log-out records in l2 matching a log-in record in l1
    logs AS l1
    LEFT JOIN logs AS l2
    ON (l1.username=l2.username AND l2.type=0 AND l2.time BETWEEN l1.time AND ADDTIME(l1.time, '0:30:0'))
  WHERE
    l1.type=1
    AND l2.idLoginLog IS NULL -- This leaves only records which do not have a matching log-out record
) AS extended_logs 
ORDER BY time;

SELECT @max AS max_users_ever;

(Violin )



  1. Laravel indlejrede forhold

  2. Er det muligt at behandle bindestreger og mellemrum ens i SQL?

  3. Sådan beregnes det gennemsnitlige salg pr. dag i MySQL

  4. HighCharts cirkeldiagram X-akser-værdier vises ikke, mens du forsøger at hente data fra MySQL-database ved hjælp af PHP