Buddy-Script programmieren

:morgen:

Ich hoffe, dass ich jetzt niemanden überfordere…
ich bastel da an einem eigenen CMS und will ein buddy-feature einbauen, sprich son’ zeugs mit freunden, freunde finden, freunde anlegen, online-status von freunden sehen und so weiter…
mein problem: ich versage schon bei der theorie, denn ich weiß nicht einmal wie ich das mit den MySQL-tabellen arangieren soll.
wie kann ein benutzer 100 freunde haben? (als beispiel)
wäre nett wenn mir da wer nen tipp geben könnte, wird sonst nichts mit meinem vorhaben…

btw: entsprechende quellcodes an denen man weiter schrauben könnte gibts natürlich auch nicht, es hängt wie gesagt alles noch an der theorie :smoke:

Hi!

Du hast ja vermutlich eine Tabelle mit den Nutzern, die - hoffe ich mal - eine automatische, eindeutige ID zugewiesen bekommen. Wenn du schon ein Script hast, dass Online-User notiert, kannst du das auch verwenden. Wenn nicht, programmier ich dir gerne eins (hab schon eins in der Schublade liegen :smiley: ) Nun kannst du die Nutzer ja identifizieren - gut.

Dann legst du eine weitere Tabelle an namens buddies oder so. Dort legst du dann zuerst auch wieder eine Spalte mit der ID an, die jedem Eintrag automatisch zugewiesen wird - wieder zur genauen Identifizierung. In das zweite Feld kommt die User-ID von dem Nutzer, dessen Buddy das ist - also zB user. Als drittes Feld dann die ID des Freundes, also wer der Freund halt ist. Diese Spalte könnte [i]buddy/i] heißen.

Als Abfrage, um alle Buddies eines Nutzers anzuzeugen, reicht dann sowas:

So hast du alle Buddies schön aufgelistet. Um abzufragen, von wem ein Nutzer der Buddy ist, kannst du sowas machen:

Wenn du noch fragen hast, immer her damit :slight_smile:

in der Standard-User-Tabelle einfach eine Spalte “buddies”, in dieser speicherst du einfach alle Buddies mit einem Trennzeichen, MySQL 4-5 verwenden nicht alle Zeichen des VARCHARs… (also die Größe ist egal…)

aso, trennzeichen…soweit hab ich noch gar nicht gedacht…
dann ist der rest auch kein problem mehr…thx

Die Idee mit den Trennzeichen ist ganz ganz schlecht, der Vorschlag von Thorr ist (normalerweise) um Welten besser.

In relationalen Datenbanken sollte man wenn es sich vermeiden lässt nie mehrere Daten in einem Feld abspeichern, man macht sich damit viel viel viel kaputt und hat später bei der Datenpflege plörtlich riesige Probleme, die da nicht hingehören.

Etwas ausfürlicher werden die Gründe z.B. unter http://de.wikipedia.org/wiki/Normalisierung_(Datenbank) beschrieben; das ganze wäre hier ein Verstoß gegen die erste Normalform.

na okay, dann nicht :ps:
aber was thorr’s vorschlag angeht:
da versteh ich aber immer noch nicht, wie eine ID mehrere freunde haben kann.
ich kann das im koppe nicht visualisieren und dann kann ich das auch nicht umsetzen…
haltet mich für blöde aber ich begreif das einfach nicht :smoke:

Eine ID steht für einen Nutzer, oder genauer für einen Datensatz. Aber ein Datensatz IST ja ein Benutzer, von daher läufts aufs selbe hinaus.

So kannst du nun für jede ID, also jeden Nutzer, mehrere Freunde in der Tabelle buddies abspeichern.

Moin,

um das Verständnis zu erleichtern, kann man thorrs Beispiel “praktisch” aufschreiben:

  • 2 Tabellen (user, buddies)

Die user Tabelle hat folgende Eigenschaften:

  • ID für jeden Nutzer
  • Name
    (mehr brauchen wir erstmal nicht)

Die buddies Tabelle hat folgende Eigenschaften:

  • ID für eindeutige Identifikation des Datensatzes
  • ID für den Nutzer
  • ID vom Freund

Daraus könnten sich als Beispiel folgende Datensätze ergeben:

user-Tabelle:
ID | Name

5 | test02
6 | hatkeinplan
7 | weissnichts

buddies-Tabelle:
ID | user | buddy
1 | 5 | 6
2 | 5 | 7

wenn wir nun die SQL-Abfrage:

$result = mysql_query("SELECT buddy FROM buddies WHERE user = 5");

ausführen, erhalten wir, dass 5 ein Freund von 6, 7 ist - und wer genau das ist, können wir dann mit einer weiteren Abfrage genau klären und ausgeben. Die Zahl 5 muss man natürlich hinterher ans Script anpassen und somit als Variable setzen.

Ich hoffe, dass es jetzt verständlich ist - wirklich nicht schwer :wink:

MfG
myPages

asoooooooooo, für jede “verbindung” ein eigener datensatz! das versteh ich! :smiley:
werde mich gleich mal dranhängen…THX

hab wieder ein kleines problem :smoke:

dieses mal gehts um die liste der freunde.

der code (sieht etwas unverholfen aus):

[code]

<? $sql = mysql_query("SELECT * FROM buddies WHERE requesttoid = '$userid' AND accept = '1' OR requestbyid = '$userid' AND accept = '1'"); $result = mysql_query($sql); while ($row = mysql_fetch_assoc($result)){ if($row['requesttoid'] != $userid){ $friendid = $row['requesttoid']; $friendname = $row['requesttoname']; }else{ $friendid = $row['requestbyid']; $friendname = $row['requestbyname']; } echo ""; } ?>
Name Status Aktionen
".$friendname."   \"Nachricht \"Löschen\"
[/code]

struktur für MySQL-tabelle „buddies“:

CREATE TABLE `buddies` ( `id` bigint(99) NOT NULL auto_increment, `requestbyid` varchar(250) collate utf8_unicode_ci NOT NULL, `requestbyname` varchar(250) collate utf8_unicode_ci NOT NULL, `requesttoid` varchar(250) collate utf8_unicode_ci NOT NULL, `requesttoname` varchar(250) collate utf8_unicode_ci NOT NULL, `anfrage` varchar(1) collate utf8_unicode_ci NOT NULL, `accept` varchar(1) collate utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`) );

hab verschiedene varianten durchprobiert, oben ist der letzte versuch…funktioniert aber alles nicht.
wo steckt da mein denkfehler?
mfg

Moin,

kurze Frage: Hat es einen besonderen Sinn, dass du versuchst eine Integer-Variable mit einer String-Variablen zu vergleichen? :wink:

Dir sollte bewusst sein, dass die UserID, die FreundesID und die normale ID des Datensatzes alles Integer-Variablen sind bzw. sein sollten.

Ansonsten bin gerade am überlegen, ob es vielleicht ratsam wäre in der MySQL-Abfrage Klammern zu setzen, um die WHERE-Ausdrücke genauer zu erfassen, weil momentan sieht das recht konfus aus?

MfG
myPages

:ps:

also wie gesagt, das war der letzte versuch…mehr oder weniger ein akt der verzweiflung oder weiß ich was… (weißt ja wie das ist von wegen probieren & studieren usw…)

und mit ein paar klammern in der abfrage soll es dann funktionieren?

fehler gefunden…
$result = mysql_query($sql); war da falsch :susp: