SQL Freundesliste PHP MySQL Abfrage

Dimenson

Erfahrenes Mitglied
Hallo,

ich steh wieder vor einem kleinen Problem und zwar habe ich eine Tabelle:

id,friend_1,friend_2

Wenn Freundschaften bestehen, stehen unter friend_1, friend_2 die demensprechenden IDs von der user Tabelle.
Nun wollte ich gerne eine Auflistung von meinen Freunden abfragen.

Meine SQL Abfrage:

SQL:
SELECT  wi_user.username,
		t_user.user_gender,
	        t_user.username_clean,
		t_user.user_birthday,
		user_friendships.id AS friendship_id,
		user_friendships.friend_1,
		user_friendships.friend_2,
		user_friendships.send_date
FROM 
	t_user
JOIN
	user_friendships
ON
	user_friendships.friend_1=t_user.id
WHERE
	(user_friendships.friend_1='".$userid."' OR user_friendships.friend_2='".$userid."')  AND user_friendships.confirm=1


Jetzt ist es so, das ich hier die Userdaten von Friend_1 mir hole, allerdings kann es sein, dass friend_1 oder auch mal friend_2 meine ID drin steht.

Gibt es eine Möglichkeit innerhalb der SQL-Abfrage eine Abfrage einzubauen irgendwie?

Danke im Voraus.

Dennis
 
SQL:
SELECT  wi_user.username,
        t_user.user_gender,
        t_user.username_clean,
        t_user.user_birthday,
        user_friendships.id AS friendship_id,
        user_friendships.friend_1,
        user_friendships.friend_2,
        user_friendships.send_date
FROM 
    t_user
INNER JOIN
    user_friendships
ON
    user_friendships.friend_1=t_user.id OR user_friendships.friend_2=t_user.id
WHERE
   t_user.id='".$userid."' AND user_friendships.confirm=1

Verbinde alle Friendship-Zeilen mit der gegebenen userID aus t_user, bei denen die ID in friend_1 oder friend_2 vorkommt. Du hättest dann aber in jeder zurückgegebenen Zeile die eigene userID enthalten, also vllt noch eine IF-Bedingung einbauen:


SQL:
SELECT  wi_user.username,
        t_user.user_gender,
        t_user.username_clean,
        t_user.user_birthday,
        user_friendships.id AS friendship_id,
IF(user_friendships.friend_1 <> t_user.id, user_friendships.friend_1, user_friendships.friend_2) AS 'friend_id',
        user_friendships.send_date
FROM 
    t_user
INNER JOIN
    user_friendships
ON
    user_friendships.friend_1=t_user.id OR user_friendships.friend_2=t_user.id
WHERE
   t_user.id='".$userid."' AND user_friendships.confirm=1
 
Moin,

danke für deine Hilfe, war ein guter Ansatz mit der IF-Anweisung. Habe es allerdings etwas anders gelöst:

SQL:
SELECT
				wi_user.id,
				wi_user.username,
				wi_user.user_gender,
				wi_user.username_clean,
				wi_user.user_birthday,
				wi_user_friendships.id AS friendship_id,
				wi_user_friendships.send_date				
		FROM 
			wi_user_friendships
		JOIN
			wi_user
		ON
			wi_user.id=IF(wi_user_friendships.friend_1 <> '".$userinfos['id']."', wi_user_friendships.friend_1, wi_user_friendships.friend_2)
		WHERE
		   (wi_user_friendships.friend_1='12' OR wi_user_friendships.friend_2='".$userinfos['id']."') AND wi_user_friendships.confirm=1
 
Ich würde es über einen kleinen UNION lösen
SQL:
SELECT
    u.username,
    u.user_birthday
    -- TODO: Auflistung der weiteren Felder
FROM
    (
        SELECT 
            uf1.friend_1 AS user_id,
            uf1.friend_2 AS friend_id
        FROM
            user_friendships AS uf1
        UNION DISTINCT
        SELECT 
            uf2.friend_2 AS user_id,
            uf2.friend_1 AS friend_id
        FROM
            user_friendships AS uf2
    ) AS uf
    LEFT JOIN t_user AS uf2
        ON u.id = uf.friend_id
WHERE
    uf.user_id='{$userid}'
 
Zuletzt bearbeitet von einem Moderator:
Zurück