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

Tabellenstruktur für "Freundschaftssystem"

Krobbus

Mitglied
Hi,
ich möchte gerne eine Funktion programmieren, womit sich Benutzer gegenseitig als Freunde adden können und sich Nachrichten schicken können. Ich bin mir nur nicht sicher, wie die Tabelle dafür aussehen sollte. Ich habe ja schon eine Tabelle, wo die Daten von registrierten Benutzer drin gespeichert werden.
Ist es möglich, mehrere Daten in einer Spalte zu speichern? Weil dann könnte ich ja zB die eindeutigen IDs (autoincr.) von anderen Benutzern bei dem jeweilgen Benutzer speichern wenn Sie ihn adden möchten. Bestätigt er das, wird die ID dann in einer anderen Spalte gespeichert wo dann die bestätigten Freunde drin sind.
Kenne mich mit SQL noch nicht so gut aus, geht das überhaupt, dass ich womöglich sehr viele Daten in eine Spalte eintragen lasse?

Oder ist dafür eine extra Tabelle nötig? Nur wie muss die dann aussehen?
 
Das ist keine gute Idde.

Aber das was du Wissen willst, läßt sich nicht eben mal erklären, vor allem wenn du wenig Ahnung hast. Ich empfehle auf jeden Fall ein Buch über (my)Sql, ansonsten wird es schwer die Komplexität des Themas wirklich zu begreifen und du bist hinterher nur am rumbasteln.
 
Alles in ein Feld pressen und hoffen, dass es nicht platzt, ist es eine sehr schlechte Idee. Je mehr Benutzer Freundschaften schließen desto breiter wird das Feld und desto mehr Zeit wird eine Suche benötigen.
Wenn du außerdem das ganze so haben willst und es ein kleines bisschen performant sein sollte, müsste in diesem Feld bei den zwei befreundeten Personen die Information der Freundschaft sein. Und das sind doppelte Informationen, ergo einmal unnötig. Sowas lässt sich auch nur sehr umständlich warten.

Eine solche Struktur sollte so aussehen:
(nn = not null, pk = primary key, a_i = auto_increment)

users( user_id int(11) nn pk a_i, username varchar(255) nn);
friends (friendship_id int(11) nn pk a_i,user1 int(11) nn,user2 int(11) nn);


Wenn dann eine Freunschaftsliste von einem Benutzer (User-ID 5) gefragt wird:

Code:
select
  friend.user_id,
  friend.username
from
  users friend,
  friends
where
  (friends.user1 = 5 and friend.user_id = friends.user2) or
  (friends.user2 = 5 and friend.user_id = friends.user1)

Wenn du dann eine Freundschaft hinzufügen willst, benötigst du nur einen Eintrag, keine zwei.
 
Zurück
Oben