Ausgeben wie viele User Online sind

aargau

Erfahrenes Mitglied
Ich stehe vor einem kleinen Problem. Ich möchte auf meiner Seite ausgeben wie viele Member akutell auf der Page sind. Nun hab ich da aber nur eine möglichkeit und ich denke diese ist etwas zu Server lastig... Ich hoffe ihr habt da eine bessere Idee wie ich das anstellen sol.

Zuerst: Alles ist in einer My SQL Datenbank gespeichert. Bei dejem Seitenaufruf wird die aktuelle timestamp Zeit in die Spalte "lastonline" des Users geschrieben.

Ausgegeben werden soll die Anzahl der User, welcher in den Letzten 2 Minuten auf der Page war.

So sieht es jetzt aus, was bei 5000 Usern sicherlich etwas last braucht, oder?
PHP:
$zahl = 0 ; 
$abfrage = "SELECT lastonline FROM benutzer ";
  $ergebnis = mysql_query($abfrage);
  while($row = mysql_fetch_object($ergebnis))
    {
$time = $row->lastonline ;

$time1 = time() - $time ;
if($time1 < 120)
		{
	$zahl++ ;
		}
    }
	echo "Es sind $zahl Besucher auf der Page" ;


Sollte ich für das ev. sogar für das eine eigene Tabelle anlegen? Nur wie müsste ich es dann machen?
 
tabelle könnte mit der ip arbeiten....

du trägst die ip ein bzw schaust ob die ip schon dirn ist und nach einem tag löschst du die ip's wieder....

halte ich für nicht so schlecht das system

musst halt a bisserl mit time() spielen....

du könntest dir aber besser noch andere counter systeme anschaun und durchgehen wie die das machen (das prinzip übernehmen/verbessern). Da wird sicher die effektivste methode überwiegen, wenn du mehrere vergleichst.
 
Wie meinst du das mit der IP? Ich meine die IP ist ja eigentlich egal... Angenommen ich habe 4000 Registrierte User in der Tabelle "benutzer". Aktuell sind ca 30 davon auf der Page, diese haben dann die aktuelle time() in der Spalte lastonline, welche auch verwendet wird um auf dem Profil zu Zeigen wann er zueletzt online war.
 
Welchen Datentypen verwendet denn die Spalte lastonline? Man kann den Query so umbauen, das er nur die Datensätze rausliefert, die lastonline > (NOW() - differenz) aufweisen.
 
Momentan VARCHAR, kann ich aber Problemlos ändern... Dann müsste ich für sowas den Typ TIME nehmen oder?

Wie müsste dann die Abfrage genau aussehen?
 
Du solltest als Datentypen Timestamp wählen, dann wäre es eine einfache Geschichte:

Code:
SELECT COUNT(*) AS count FROM benutzer WHERE NOW() - lastonline <= 120


Die 120 sind die Sekunden für 2 Minuten.


Query ohne gewähr, hab ich mir grad aus den Fingern gesaugt ^^
 
so, nun bin ich endlich wieder mal dazu gekommen an dem zu Basteln. Nun hab ich einfach ein Problem. Mit dem Typ timestamp hab ich in der Tabelle "0000-00-00 00:00:00" eingetragen wird der aktuelle timestamp komischer weise nicht :(
was mach ich falsch?
 
so, nun bin ich endlich wieder mal dazu gekommen an dem zu Basteln. Nun hab ich einfach ein Problem. Mit dem Typ timestamp hab ich in der Tabelle "0000-00-00 00:00:00" eingetragen wird der aktuelle timestamp komischer weise nicht :(
was mach ich falsch?

Warum nimmst Du nicht einfach ein VARCHAR mit der Grösse 17. Da passt super ein reiner Timestamp rein.
 
Zurück