Abfrage einer Freundesliste

creativeheadz

Erfahrenes Mitglied
Guten Abend zusammen,

Ich sitze gerade an einer Abfrage für eine Freundesliste, und weiss nicht wi ich diese Aufbauen soll.

Die DB-Tabelle meiner Freundesliste sieht wie folgt aus:

User_1 --- User_2

hans ------ tobi
tobi -------- peter

..

Nun möchte ich beispielsweise alle Freunde von Tobi ausgeben.

Nur habe ich jetzt das Problem das tobi sowohl bei user1 und user2 stehen kann.

Weiss jemand Rat?

Gruß
 
Ich würde so eine Liste folgendermaßen interpretieren:

Da ja jeder von sich aus sagen muss "Das ist mein Freund!", steht auf der linken Seite, also in User_1, der User, der genau dies sagt und auf der rechten Seite, also in User_2, der Freund. In deinem Beispiel würde das also heißen, dass Tobi zwar Hans' Freund ist, Hans aber nicht Tobis.

Fragst du also nach Tobis Freunden, kommt bei dieser Abfrage nur Peter raus. Möchtest du, dass Hans auch Tobis Freund ist, wäre ein weiterer Eintrag (Tobi; Hans) von Nöten. So hast du auch keinerlei Probleme beim Abfragen.
 
Du brauchst rein theoretisch zwei Tabellen:
Tabelle 1: Nutzer
Code:
 ID   | Name    | ... 
----------------------
 0001 | Hans    | ...
 0002 | Peter   | ...
 0003 | Dieter  | ...

Tabelle 2: Freundesliste
Code:
 ID   | Hat Freund 
-------------------
 0001 | 0002 
 0001 | 0003
 0002 | 0001
 0003 | 0001

Und jetzt noch die Abfrage:
Code:
SELECT `Name`
FROM `Nutzer`
WHERE `ID` = '0001'
INNER JOIN  `Freundesliste`
ON `Nutzer`.`ID` = `Freundesliste`.`Hat Freund`
 
Hey,
danke erstmal für die prompte Antwort. Gibt es keine Möglichkeit zusagen

ich suche alle Einträge die den User tobi enthalten und dazu dann den entsprechenden "Gegenübereintrag" (user_1 bzw. user_2)

Ich dachte da irgendwie an folgendes, klappt aber nicht so wirklich. Er schmeisst mir nicht die korrekten Freunde aus.

PHP:
$sql = mysql_query("SELECT user_1, user_2 FROM friends WHERE user_1='$user' OR user_2='$user'");

while($row = mysql_fetch_object($sql)){
	
	if($row->user_id == $user){
	
	$friend = $row->friend_id;
	
	}
	
	if($row->friend_id == $user){
	
	$friend = $row->user_id;
	
	}
 
Ist bestimmt möglich, aber unnütz. Kümmere dich lieber darum dein System zu normalisieren, das bringt dir wesentlich mehr.

PS: Deinem Beispiel entsprechend, müsste das Ganze so aussehen:
PHP:
<?php
$sql = mysql_query('SELECT `user_1`, `user_2` FROM `friends` WHERE `user_1` = "'.$user.'" OR `user_2` = "'.$user.'"'); 
while($row = mysql_fetch_object($sql)) { 
    if($row->user_1 == $user) {
        $friend[] = $row->user_2; 
    }
    elseif($row->user_2 == $user) { 
        $friend[] = $row->user_1; 
    }
}
?>
 
Zuletzt bearbeitet:
Hey,

ja das war ja nur ein Ansatz eines Ahnungslosen auf der Suche nach mehr Gehirnschmalz :)


Hatte deinen Post erst gesehen nachdem ich meinen Unfug postete.


PHP:
$sql = mysql_query("SELECT `username`
FROM `user`
WHERE `username` = '$user'
INNER JOIN  `friends`
ON `user`.`user_1` = `friends`.`user_2`");

while($row = mysql_fetch_object($sql)){
	
	echo 
	
	}

So sähe dann meine Abfrage aus wenn ich die User liste und friendsliste einbauen würde.

was muss nun ins echo rein um die Freunde anzuzeigen?

$row-> username wirft mr nix aus
 
Zurück