UndSo: Datensätze in SQL-Abfrage sortieren

Hallo Forum, eine kleine Frage.

Unsere Mitglieder können sich Freundschaftsanträge auf unserer Seite stellen.

Bisher hatte ich das so gemacht, dass in der DB zwei Zeilene erzeugt wurden.

Tabelle: Freunde

userid   freundid  kat_u  kat_f
10       12         0     0
12       10         0     0
10       11         0     0
11       10         0     0

Anschließend hatte ich (als Mitglied:10) so eine ähnliche Query:

select friendid, kat_f from Freunde where userid=10;
Die Daten habe ich in eine Array rein und per While-Schleife ausgegeben.

Wenn ich nun daraus eine Zeile mache:
userid   freundid  kat_u  kat_f
10       12         0     0
11       10         0     0

Würde die Query wie folgt aussehen:
select friendid, kat_f from Freunde where userid=10 OR friendid=10;

Mein Problem ist nun, dass ich in dem Datensatz meine eigene friendid bei Mitglied:11 erhalte, somit kann ich nicht korrekt verlinken.

Könnte man das irgendwie in die Query einbauen, dass er Spalte friendid holen soll, wenn nicht meine ID (10) dort eingetragen ist, ansonsten soll der die Spalte userid abfragen.

Grüße

  1. Bzw. ich merke gerade, dass ich für die Freundetabelle eine Join-Tabelle habe, um mit der Userid von einer anderen Tabellen dern Usernamen vom Freund zu ermitteln.

    Am besten, ich lasse alles beim alten und Füge bei einer Freudnschaft immer zwei Zeilen ein oder?

    Grüße

    1. Das klingt sinnig, auch wenn ich dir nicht wirklcih ganz folgen konnte.

      2 Zeilen ermoeglichen es mir jemanden auf meiner freindlist zu haben, ohne auf seiner zu sein. (Falls ich dich da richtig verstanden habe)

      1. Ja, so werde ich es dann auch am besten machen.

        Grüße

  2. Hallo,

    du möchstest eventuell ein UNION benutzen, der einmal
    userid = userid ausgibt und einmal userid = freundid?

    Dann verwende doch am besten ein UNION

      
    SELECT  
         userid, freundid, kat_u, kat_f  
      FROM Freunde  
    UNION  
    SELECT  
         freundid, userid, kat_f, kat_u  
      FROM Freunde  
    
    

    Das ergibt dann
    userid   freundid  kat_u  kat_f
    10       12         0     0
    11       10         0     0
    12       10         0     0
    10       11         0     0

    Wenn du angenommen bereits auch folgende Daten gespeichert hättest
    27       28         0     0
    28       27         0     0

    Dann bekommst du diese nicht doppelt, da UNION für gewöhnlich einen DISTINCT macht (anders als UNION ALL). Das liest du aber im Handbuch deines Datenbanksystems nach.

    Ciao, Frank