Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

hitung sebagian besar pengguna yang pernah online dengan MySQL

Anda dapat menggunakan variabel MySQL untuk menghitung jumlah pengunjung yang saat ini masuk dan kemudian mendapatkan maksimum:

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 )

Sunting: Saya juga punya saran bagaimana menangani pengguna yang tidak secara eksplisit keluar. Katakanlah Anda menganggap pengguna keluar secara otomatis setelah 30 menit:

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;

(Fiddle )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Integer vs char untuk properti record DB

  2. MySQL Pesan sebelum Grup oleh

  3. Batas MySQL dengan Banyak ke Banyak Hubungan

  4. Muat data infile MySQL dengan URL absolut

  5. MYSQL + PHP untuk menampilkan data dari dua baris sebagai satu kolom