Zeek: Multi-Table Select

Moin Foren-Gemeinde.

Ich bin gerade dabei ein größeres Projekt zu programmieren, eine Community, um genau zu sein, und habe ein entscheidendes Problem:

Ich habe eine Tabelle für "Freundschaften", die man auf der Community schliessen kann. In dieser Tabelle gibt es 2 Felder von Bedeutung, nämlich "Nickname1" und "Nickname2". Freunde eines Users kann ich finden, indem ich folgende Abfrage tätige:

SELECT Nickname1 FROM freundschaften WHERE Nickname2='Username'

SELECT Nickname2 FROM freundschaften WHERE Nickname1='Username'

Die beiden Ergebnis-Arrays führe ich dann zusammen und habe somit eine Liste aller Freunde.

Jetzt habe ich eine zweite Tabelle, in der die User stehen, die gerade online sind. Unter anderem auch mit ihrem Username. Nun will ich eine Abfrage machen, die mir alle Freunde des Users liefert, die zudem gerade online sind.

Ich könnte es natürlich folgendermaßen machen:
(array freunde beinhaltet die freunde, die ich durch die obigen abfrage erhalten habe)

SELECT Nickname FROM loggeduser WEHERE Nickname=freunde[0] OR Nickname=freunde[1] OR Nickname=freunde[2] OR......

Das ist aber wohl ziemlich unelegant und durch bis zu 100 OR-Statements auch nicht sehr schnell, oder?

Bin für jede Hilfe dankbar!

Zeek

  1. Sup!

    SELECT Nickname1 FROM freundschaften WHERE Nickname2='Username'

    SELECT Nickname2 FROM freundschaften WHERE Nickname1='Username'

    Die beiden Ergebnis-Arrays führe ich dann zusammen und habe somit eine Liste aller Freunde.

    Wie wär's mit
    select a.nickname
    from loggeduser a , (

    select nickname1 nickname
    from freundschaften
    where nickname2='Username'
    union
    select nickname2
    from freundschaften
    where nickname1='Username' ) b

    where a.nickname = b.nickname;

    Das sollte... theoretisch... mit einer Oracle-DB funktionieren.

    Gruesse,

    Bio

  2. Hallo

    SELECT Nickname1 FROM freundschaften WHERE Nickname2='Username'

    SELECT a.Nickname FROM loggeduser a, freundschaften b WHERE (b.Nickname1=a.Nickname AND b.Nickname2='Username') OR (b.Nickname2=a.Nickname AND b.Nickname1='Username')

    Vielleicht klappt's. Hoffe die Logik umgesetzt zu haben und mySQL-kompartibel zu sein.

    Grüße aus Würzburg
    Julian