php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Scripts > BRAINSTORMING PHP/SQL/HTML/JS/CSS
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


BRAINSTORMING PHP/SQL/HTML/JS/CSS Ihr habt eine Idee, aber keinen genauen Ansatz? Diskutiert mit anderen Usern des Forums über eure Gedankengänge um evtl. hilfreiche Ideen zu bekommen!
Normale Fragen bitte weiterhin in die entsprechenden Foren!

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 30-10-2008, 12:22
vayio
 Newbie
Links : Onlinestatus : vayio ist offline
Registriert seit: Apr 2008
Beiträge: 15
vayio ist zur Zeit noch ein unbeschriebenes Blatt
Standard Freundesliste

Hallo,

möchte gerade eine Freundesliste erstellen, und zwar von den Freunden, die online sind. Jetzt ist mir aber der Aufbau wichtig und eure Meinung dazu, ob mein Gedanke bzgl. meiner Datenbankstruktur sinnvoll ist:

Ich habe eine Tabelle 'users', wo alle Benutzer gespeichert werden und die Spalte 'session' angibt, ob der Benutzer online (1) oder offline (0) ist.

Dann habe ich noch die Tabelle 'friends', wo die Spalte 'uid' angibt welcher Benutzer von welchem anderen Benutzer (Spalte 'rid') der Freund ist.

Jetzt möchte ich aber nur anzeigen lassen, welcher Freund gerade vom eingeloggten Benutzer, also mir z.B. ($SESSION_['user_id']), online ist.

Meine Überlegung ist: Daten per while-Schleife von 'friends' holen, dann weitere while-Schleife in der ersten Schleife, wo Benutzer gewählt werden, wo 'session' ungleich 0 ist und diese ausgegeben werden.

Was für vernünftige Möglichkeiten gibt es eventuell zusätzlich, um dies zu realisieren oder ist die Überlegung so in Ordnung? Und ist die Datenbankstruktur bisher sinngemäß/effizient?

LG
Mit Zitat antworten
  #2 (permalink)  
Alt 30-10-2008, 12:28
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.724
Kropff befindet sich auf einem aufstrebenden Ast
Standard

sieht eher nach brainstorming aus. daher * verschieb *

peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #3 (permalink)  
Alt 30-10-2008, 13:31
vayio
 Newbie
Links : Onlinestatus : vayio ist offline
Registriert seit: Apr 2008
Beiträge: 15
vayio ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also, ich hab das nun wie folgt gemacht:

PHP-Code:
    $result mysql_query("SELECT rid FROM friends WHERE uid='".$_SESSION['user_id']."'"); # Daten holen
    
while ($friend mysql_fetch_array ($result)){
    
    
$totalfriends 
mysql_fetch_array(mysql_query("SELECT COUNT(id) FROM users WHERE id='$friend[rid]' AND session!='0'"));
    
    
$i=1;
    
$result2 mysql_query("SELECT username FROM users WHERE id='$friend[rid]' AND session!='0'"); # Daten holen
    
while ($user mysql_fetch_array ($result2)){
     
     echo 
"<tr><td height='16' align='center'>
     <table width='129' border='0' cellspacing='0' cellpadding='0'>
     <tr><td height='7'></td></tr>
     <tr><td class='orange' height='18'>$user[username]</td></tr>
     <tr><td valign='top' height='20'><div align='right'>"
;
     if (
$i == "$totalfriends[0]") { echo "<span class='small_10px'>$i online</span>"; }
     echo 
"</div></td></tr></table>
     </td></tr>"
;
     
     
$i++; } 
Klappt auch prima, jedoch immer noch meine Frage, ob dies "gut" realisiert ist oder man irgendwelche Einsparungen machen oder etwas anderes beachten sollte? Mir geht es darum, dass ich das ganze auch "vernünftig" mache, falls verstanden wird, was ich damit meine...

Geändert von vayio (31-10-2008 um 20:41 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 30-10-2008, 21:59
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du möchtest dich über JOINs informieren.
Ansonsten sehe ich da spontan nichts verwerfliches dran. (Außer, dass du ggf. irgendwann in die Bredouille kommen wirst, dass die write-Last auf deine users-Tabelle zu groß wird wegen der Aktualisierung der session-Spalte... aber um das Problem kann man sich dann kümmern~)
Mit Zitat antworten
  #5 (permalink)  
Alt 30-10-2008, 22:37
vayio
 Newbie
Links : Onlinestatus : vayio ist offline
Registriert seit: Apr 2008
Beiträge: 15
vayio ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Alles klar, mit Joins kenne ich mich bisher nicht wirklich aus, danke!

Was genau meinst du damit? Dass die session-Spalte an sich nicht sehr sinnvoll ist und ich über andere Methoden nachdenken sollte, um zu prüfen, wer online ist oder was genau?

Dankeschön!
Mit Zitat antworten
  #6 (permalink)  
Alt 31-10-2008, 08:34
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von vayio
Was genau meinst du damit? Dass die session-Spalte an sich nicht sehr sinnvoll ist und ich über andere Methoden nachdenken sollte, um zu prüfen, wer online ist oder was genau?
Nein, ich meine damit, dass die Write-Last auf deine Users-Tabelle durch die dauernde Aktualisierung eventuell zum Problem wird für die lesenden Prozesse.
Solange du aber in das Problem nicht läufst, sehe ich da wenig Sinn dir jetzt die Grundlagen von konkurrierenden Systemen zu erklären...

Wo setzt du denn die Session-Spalte wieder auf 0?
Mit Zitat antworten
  #7 (permalink)  
Alt 31-10-2008, 18:53
vayio
 Newbie
Links : Onlinestatus : vayio ist offline
Registriert seit: Apr 2008
Beiträge: 15
vayio ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du meinst, diese Abfrage bei jedem Seitenklick, die anzeigt, wer gerade online ist? Oder hab ich das missverstanden? Wann würde ich denn in dieses Problem laufen?

Die Session-Spalte wird auf 0 gesetzt, sobald sich ein Benutzer ausloggt oder mehr als 15min der letzten Aktivität vergangen sind. Und das geschieht auch bei jedem Seitenaufruf in dieser Prüfungsform: Wenn Session gesetzt = online = Session-Spalte auf 1, sonst 0. Gibt es denn sonst Alternativen?
Mit Zitat antworten
  #8 (permalink)  
Alt 31-10-2008, 19:24
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Brich mal bitte deine beiden langen Code-Zeilen um. Mich regt es auf, dass hier ein horizontaler-Scrollbalken ist.

Zitat:
Original geschrieben von vayio
Du meinst, diese Abfrage bei jedem Seitenklick, die anzeigt, wer gerade online ist? Oder hab ich das missverstanden? Wann würde ich denn in dieses Problem laufen?
Ich sagte Write, nicht Read-Last.
Wenn 500 Benutzer gleichzeitig eine Website aufrufen, wird 500 Mal in der users-Tabelle upgedated, dabei können (ggf.? ich würde sogar ohne sagen) keine konkurrierenden SELECT-Statements ausgeführt werden, weil MyISAM mit Table-Lock arbeitet.
Die Performance deines DB-Servers kannst du dir an einem Finger abzählen.

Zitat:
Die Session-Spalte wird auf 0 gesetzt, sobald sich ein Benutzer ausloggt oder mehr als 15min der letzten Aktivität vergangen sind. Und das geschieht auch bei jedem Seitenaufruf in dieser Prüfungsform: Wenn Session gesetzt = online = Session-Spalte auf 1, sonst 0. Gibt es denn sonst Alternativen?
Also praktisch ein Select über alle Einträge in der users-Tabelle wo session = 1 und für jeden ein Select auf die Session-Tabelle?



Also zur Vermeidung der write-Last kannst du das aktuelle Datum beim Setzen von session = 1 mit speichern. Und dann das ganze irgendwie so einpacken
PHP-Code:
<?php
$result 
sql_fetch_assoc(sql_query("SELECT COUNT(*) from users where
 user_id = $current AND session = 0 AND session_date < NOW() - INTERVAL 3 MINUTE"
));
if (
$result["count"] > 0) {
  
sql_query("update session = 1, session_date = NOW() where user_id = $current");
}
Ansonsten würde sich auch noch eine SHM (Shared Memory)-Variante anbieten.

Tendenziell würde ich die Session-Spalte(n) aus der users-Tabelle raus nehmen.
Das ist ein großes Gewicht für die Tabelle.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni


 

Aktuelle PHP Scripte

HeidiSQL - kostenloses MySQL front-end Editor für Windows ansehen HeidiSQL - kostenloses MySQL front-end Editor für Windows

HeidiSQL - ist ein Windows-Editor für die bekannt open Source Datenbank mySQL

10.12.2018 Berni | Kategorie: MYSQL/ Management
piwik Open-Source Webanalyse-Software ansehen piwik Open-Source Webanalyse-Software

piwik ist eine gute Alternative zu Google Analytics. Viele Features und ein modernes Erscheinungsbild mit aussagefähigen Statistiken in Echtzeit

10.12.2018 phpler | Kategorie: PHP/ Besucherzaehler
jQuery Mobile ansehen jQuery Mobile

Touch-Optimized Web Framework für Smartphones & Tablets

09.12.2018 phpler | Kategorie: AJAX/ Framework
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:57 Uhr.