mijane Blog

ein paar interessante Sachen gibt es immer

Friend of a Friend

Geschrieben von Peter Rother • Samstag, 6. Juni 2009 • Kategorie: Klassen
Heute möchte ich euch eine kleine Klasse von mir vorstellen, die die Verbindung von einem User über Verbindungen zu anderen Usern bis zum gesuchten User erstellt. Diese Funktion ist manchen vielleicht von Xing oder anderen Netzwerken bekannt.


Da ich zuerst zu faul war die Klasse selber zu schreiben, habe ich gewartet bis jemand meinem Wunsch nachkommt und diese Klasse auf PHP hates me vorstellt. Dies ist dann auch durch den Beitrag von Ludwig Ruderstaller in dem Beitrag Six Degrees of Separation (friend of a friend) geschehen. Leider konnte ich, wie nach anfänglicher Euphorie festgestellt, die Klasse für das von mir benötigte nicht einsetzen. Der Dijkstra-Algorithmus ist, wie ich finde, hier fehl am Platz. Trotzdem einen Dank an den Entwickler der Klasse Ludwig Ruderstaller, denn wir wissen ja alle, wie viel Arbeit eine vernünftige Klasse manchmal machen kann.


Aber da ich die Klasse jetzt für das was ich benötige neu geschrieben habe, möchte ich euch diese jetzt auch vorstellen. Da ich immer noch keinen vernünftigen Syntax Highlighter installiert habe, könnt ihr euch die Klasse momentan nur als Text File ansehen. Die Klasse ist aus meinem aktuellen Projekt Pokerwelt24, welches in Kürze in die offene Beta Phase gehen wird. Die Klasse ist deshalb auch nicht als Stand Alone angepasst. Mit ein Paar kleinen Änderungen solltet ihr die Klasse auch auf eure Wünsche anpassen können.


Hier ein Auszug der Methoden die Standardmäßig nicht von der Klasse benötigt werden:


private function getUniqueRequiredUsers($aUserPaths)
private function removeNotRequiredLoadIds()
private function loadRequiredUsers()
private function regenerateUserList($aUserList)


Ich benötige diese Methoden, um die entsprechenden User Objekte zu generieren und diese meiner Liste zuzuweisen.
Natürlich braucht ihr auch noch eine Verbindung zur Datenbank. In meiner Klasse passiert dies durch den Aufruf von:


parent::execute($sSelect);


Ich schätze aber mal, dass jeder von euch weiß, wie ihr eure Datenbank ansprechen müsst.


Eine kleine Feinheit hat der Query auch noch; es werden nur User Verbindungen gesucht, wobei eine Verbindung von zwei Usern auch bestätigt wurde. Dies wird in der Datenbank durch das Flag status und status2 bestimmt.


Hier folgt noch die Struktur der Datenbank und dann wünsche ich euch viel Spaß und Erfolg mit dieser Klasse.


CREATE TABLE `buddy_list` (
`ID` varchar(32) collate latin1_general_ci NOT NULL,
`USER_ID` varchar(32) collate latin1_general_ci NOT NULL,
`USER_ID_2` varchar(32) collate latin1_general_ci NOT NULL,
`STATUS` enum('a','r','w') collate latin1_general_ci NOT NULL COMMENT 'a = accepted, r = rejected, w = waiting',
`STATUS_2` enum('a','r','w') collate latin1_general_ci NOT NULL COMMENT 'a = accepted, r = rejected, w = waiting',
`CREATED` datetime NOT NULL,
PRIMARY KEY (`ID`),
KEY `USER_ID` (`USER_ID`),
KEY `USER_ID_2` (`USER_ID_2`)
)


Die Verknüpfung zur User Tabelle erfolgt über USER_ID für den der anfragt und USER_ID_2 für die Person, an die der Request geht.


 


 


Tags für diesen Artikel: ,
Tweet This!Tweet This!

0 Trackbacks

  1. Keine Trackbacks

2 Kommentare

Ansicht der Kommentare: (Linear | Verschachtelt)
  1. Hallo Peter,
    Danke für trackback link.

    hab versucht deine klasse zu verstehen, kannst du mal einen beispiel return von getQuery() posten ? Mir kommt vor du machst mehr queries als notwendig wären.

    lg
    Ludwig
  2. Hallo Ludwig,

    ich werde spätestens am Wochenende mal den Return Wert hier einstellen, ist momentan ein bißchen Stressig.
    Wäre aber super wenn man hier noch etwas optimieren könnte. Schon einmal Danke für den Hinweis.

    Gruß
    Peter

Kommentar schreiben


Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss um dieses Verfahren anzuwenden.
CAPTCHA


Kommentare werden erst nach redaktioneller Prüfung freigeschaltet!