• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

sql Felder mit anderem Aktualisieren

djfabi

Mitglied
Hallo,

Also ich habe eine Tabelle User in einer Datenbank Namens Test.

So jz habe ich noch dine DB namens testzwei.

Jeder User gibt in der Tabelle User seinen Status (Offline/Online.. Usw) an.

In der DB testzwei bekommt jeder User eine Tabelle wo seine Freunde reinkommen. In dieser Tabelle ist auch das Feld mit Status. So ich will das dieses Feld die Daten aus der eigentlichen User Datenbank hohlt, und sich somit Aktualisiert. Oder gibt es da andere/bessere Methode für?

MfG Fabian
 
Äh ja, wieso 2 verschiedene Datenbanken? Leg doch lieber 2 Tabellen auf einer Datenbank an.

Ansonsten leuchtet mir nicht ein, warum du den Status sowohl in der User-Tabelle, als auch in der Freundetabelle hast. Wenn du die Freunde und derren aktuellen Status gleichzeitig holen willst, dann Join doch einfach ;)

MySQL :: MySQL 5.1 Referenzhandbuch :: 13.2.7.1 JOIN
 
Gehen wir mal davon aus; 20 User, so jeder dieser 20 User soll eine eigene Tabelle in Der DB Freunde bekommen, und dort seine Freunde rein. Aber nicht jeder dieser 20 ist auch mit jedem befreundet. Also gibt es sehr viele verschiedene Möglichkeiten. Wenn ich in meiner Haupt-db alle Daten + pro User 1 Tabelle + normale Daten hab ist die ein bisschen un-übersichtlich.

Aber naja, wie wende ich diese JOIN denn aus..? Ich meine es muss dann ja irgentein Skript laufen, der diesen Befehl immer ausführt.. Aber wie? Und wo GENAU muss ich diesen JOIN Code anwenden, ich bin in MySQL nicht wirklich erfahren, nur mit PHPmyAdmin, deshalb habe ich den Inhalt deiner Seite nicht 100% verstanden.

Es wäre nett wenn mir jmd hier auf die Sprünge hilft.. Entschuldigung für mein nicht-Wissen.

MfG Fabian
 
Du machst eine Tabelle Users und eine Tabelle Friendships.

Code:
create table users (
    user_id int auto_increment primary key,
    username varchar(255) not null
);
create table friendships (
    friendship_id auto_increment primary key,
    user1 int not null,
    user2 int not null
);

In user1 und user2 kommen die Freundschaften rein.

Um die Freunde eines Benutzers mit der Id 300 zu erhalten machst du das dann so:

PHP:
select
  friends.user_id,
  friends.username
from
  users as friends
inner join
  friendships
on
  (
    (
      friendships.user1 = 300 and
      friends.user_id = friendships.user2
    ) or
    (
      friendships.user2 = 300 and
      friends.user_id = friendships.user1
    )
  )

Mit diesem Query holst du alle Benutzer, die mit dir befreundet sind. Falls 300 in user1 steht, ist der Freund von 300 in user2, falls 300 in user2 steht, ist der Freund von 300 in user1.
 
Erstmal danke für die schnelle Antwort.

Aber noch ne Frage,

Was sagt diese Zahl 300? Sry aber das hab ich noch nicht gerallt.

Und noch ne Frage, Wieviele Freunde kann man denn dann haben? Und wieso User1 und user2 ?

Sorry für die blöden Fragen, aber ohne das lerne ich ja auch nichts, ich will das ja nicht einfach nur einbaunm, sondern auch lernen, wieso weshalb und warum das Ganze ;)
 
Diese Zahl 300 ist die User-ID, wurde in Asterixus' Code nur als Beispiel verwendet. Du kannst so unendlich viele User mit unendlich vielen Freunden anlegen und benötigst dazu nur 1 Datenbank und 2 Tabellen. Unendlich im Sinne von bis die Datenbank keinen Speicherplatz mehr hat ;)
 
Ahh, ok danke, jz habe ich es verstanden, Danke für eure Lösung,
So aber jz muss ich nochmal nerven, wie löse ich jz das Problem mit dem Online/Offline Status? Weil zb will ich dann alle meine Freunde anzeigen, und zb alle Meine Freunde, die Online sind. Soweit ich den Code verstanden hab, is das jz ja noch nicht dabei.
Wie geht denn das nun?
 
Ein Feld in users in dem du die letzte Onlinezeit eingibst und das dann mit der aktuellen Zeit vergleichst.
 
Nein, du solltest dafür datenbankeigene Funktionen nutzen. Also brauchst Du eine DATETIME-Spalte. Wenn Du etwas eintragen willst, nutze dafür NOW(). Beispiel:

Code:
UPDATE tabelle SET lastactive = NOW() WHERE userid = 'abd'

In dem Statement zum Auslesen kannst Du dich dann auf diese Spalte beziehen. Um zu prüfen, ob jemand vor 5 Minuten online war also mit

Code:
...WHERE lastactive >= DATE_SUB(NOW(),INTERVAL 5 MINUTE )

Siehe auch:
MySQL :: MySQL 5.1 Referenzhandbuch :: 12.5 Datums- und Zeitfunktionen
 
Now() benutzen ist ein schlechter Tipp, denn der Server, auf dem sich das PHP-Script befindet, muss nicht auf demselben Server sein, wie der auf dem sich die Datenbank befindet. Es könnten also Sekundenunterschiede (oder möglicherweise Stundenunterschiede durch Zeitzonen) entstehen. In dem Moment ist es anzuraten, PHPs time()-Funktion zu benutzen, um damit ggf. mit Date-Funktionen von MySQL zu arbeiten.

Auch, wenn viele mich dafür umbringen werden, aber ich rate an mit Unix-Timestamps zu arbeiten, denn MySQL macht intern nichts anderes und damit gibt es keine Zeitzonenprobleme.
 
Wenn man die MySQL-eigenen Funktionen für Datums- und Zeitberechnung sowohl beim Speichern als auch beim Auslesen nutzt, ist es irrelevant ob Web und MySQL-Datenbank auf 2 verschiedenen Servern laufen.
 
Wenn man die MySQL-eigenen Funktionen für Datums- und Zeitberechnung sowohl beim Speichern als auch beim Auslesen nutzt, ist es irrelevant ob Web und MySQL-Datenbank auf 2 verschiedenen Servern laufen.

Ist es nicht, denn soweit ich weiß, ist es PHP völlig egal, aus welcher Zeitzone eine Zeitangabe in der Datenbank stammt. Für einige Applikationen ist es unmöglich, sich nur auf die Datenbankzeit zu beziehen, denn oft ist REQUEST_TIME die Angabe, an der man sich richten sollte und nicht eine ungefähre Zeit zum Moment, in dem man eine Codezeile ausführt.

Gegen die Benutzung eines scriptseitigen Unix-Timestamps spricht absolut nichts, falls man keine komplexen Zeitunterschiede berechnen will und einem die Übersicht auf den ersten Blick in einer Tabelle egal ist.
 
Hallo,
ich weiß, der Thread ist nun schon etwas älter..
Aber ich will ihn trotzdem nocheinmal hervorrufen, weil es genau wieder um dieses Beispiel geht.

Wie geht es nach diesem Code hier weiter:
PHP:
select
  friends.user_id,
  friends.username
from
  users as friends
inner join
  friendships
on
  (
    (
      friendships.user1 = 300 and
      friends.user_id = friendships.user2
    ) or
    (
      friendships.user2 = 300 and
      friends.user_id = friendships.user1
    )
  )
?


Weil wie sieht es aus mit dem fetch?
ich hattte das mal mit dem
PHP:
mysql_fetch_object()
probiert, so wie man es bei einer normalen Abfrage, wie dieser macht:
PHP:
mysql_query("SELECT * FROM tabelle WHERE dasdas = 'meins' ");

Zum Beispiel, aber wie geht das jetzt bei dieser Speziellen Abfrage?
 
Wie das Statement aussieht ist den PHP-Funktionen, die es ausführen und die Ergebnisse auslesen, egal.
 
Zurück
Oben