none
Abfrageproblem Freundestabelle RRS feed

  • Allgemeine Diskussion

  • Hallo,

    Ich habe eine Tabelle "Freunde (id, fk_UserId_1, fk_UserId_2, usw.)"  für die Freundesliste wer mit wem befreundet ist.
    Wenn jetzt Bsp. UserA eine Einladung an UserB schickt und dieser die Einladung akzeptiert, dann wird in der Spalte "fk_UserId_1" meine ID geschrieben und in die Spalte "fk_UserId_2" die vom Freund.
    Im umgekehrten Falls wird es umgekehrt gespeichert.
    Dazu benötige ich noch einen Join um die Bentzerdaten zu bekommen.

    	
    	SELECT * FROM t_Freunde f 
    	INNER JOIN t_Users u ON u.UGCID = f.fk_UserId_1
    	WHERE f.fk_UserId_2 = 52
    	

    Mit diesem Code bekomme ich entweder meine oder die Benutzerdaten vom Freund je nach wer die Anfrage gemacht hat.
    Mein Ziel ist es alle Freunde egal ob die Einladdung von mir oder vom anderen ist, abufragen.

    Derzeit verwende ich den obigen Code.
    In ASP wenn mit der Abfrage meine Benutzerdaten erhalte dann frage ich mit der ID von "fk_UserId_2" die User-Tabelle ab um an die Benutzerdaten zu kommen, doppelte Abfrage meisten.

    Gibt einen einfacheren Weg. Danke im voraus und Lg

    WaZZ



    Dienstag, 17. März 2015 12:12

Alle Antworten

  • Hi,

    probier mal das hier:

    WITH Query AS
    (
    SELECT f.Spalte1,
           f.Spalte2,
           ...
           u1.Spalte1,
           u1.Spalte2,
           ...,
           u2.Spalte1,
           u2.Spalte2,
           ...
    FROM   t_Freunde f 
           INNER JOIN t_Users_1 u1 ON u.UGCID = f.fk_UserId_1
           INNER JOIN t_Users_2 u2 ON u.UGCID = f.fk_UserId_2
    )
    SELECT *
    FROM   Query
    WHERE  ( fk_UserId_1 = 4711 OR fk_UserId_2 = 4711 )

    Falls Du nur die Userangaben zu Freunden haben willst, geht das aber auch so:

    SELECT *
    FROM   t_Users u
    WHERE  u.UGCID IN ( SELECT fk_UserId_1 FROM t_Freunde WHERE fk_UserId_2 = 4711 )
    OR     u.UGCID IN ( SELECT fk_UserId_2 FROM t_Freunde WHERE fk_UserId_1 = 4711 )
    


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Dienstag, 17. März 2015 12:37
    Moderator
  • Hallo und danke für die schnelle Antwort.
    Leider funktioniert das mit deiner Abfrage auch nicht.

    Habe leider den Header nicht kopiert, aber die sind wie fiolgt:

    User1, User2, PKID, wert, UserID_Von_Tabelle_Users

    Die ersten zwei Spalten sind von der Tabelle Freunde, die restlichen von der Users Tabelle.
    In der zweiten Datenzeile, letzte Spalte (52 = meine bzw. angemeldeter User ID) sieht man das von der User-Tabelle die falschen Infos abgefraagt werden. Hier sollte wie oberer Datenzeile die Infos von User mit der ID 1 abgefragt werden.

    Hier der angepasster Code

    	
    	WITH Query AS
    (
    SELECT f.fk_User1,
           f.fk_User2,
           u1.*
    FROM   t_Freunde f 
           INNER JOIN t_Users u1 ON u1.ID = f.fk_User1
           INNER JOIN t_Users u2 ON u2.ID = f.fk_User2
    )
    SELECT *
    FROM   Query
    WHERE  ( fk_User1 = 52 OR fk_User2 = 52 )
    	

    Dein Code original Code geht von zwei User-Tabellen aus daher wenn ich zu
    u1.* noch u2.* oder die Spallten einzeln angeben dann wird ein fehler bzgl. "Multiple Columns" ausgeworfen

    Danke und Lg

    WaZZ

    Dienstag, 17. März 2015 13:11
  • Hi,

    darum habe ich eben nicht u1.*, ... sondern u1.Spalte1, ... geschrieben. Dort kannst Du dann problemlos mit Aliasnamen arbeiten, bspw. u1.Spalte1 AS u1_Spalte1, u1.Spalte2 AS u1_Spalte2, ...

    Die Fehlermeldung bzgl. Multiple Columns kommt dann nicht mehr.

    Die falschen Werte werden nicht abgefragt/angezeigt, Du gibst nur die falschen Werte aus. Das liegt aber IMHO an der unklaren Fragestellung bzw. einer falschen Vorstellung deinerseits, was Du da wie ausgeben willst.

    Ich verstehe es eigentlich so, dass Du eine Liste der User willst, die in der Freunde Tabelle stehen und bei denen fk_UserId_1 oder fk_UserId_2 der UserId des aktuell angezeigten Users entsprechen. In dem Fall wäre das zweite Statement von mir passender.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 17. März 2015 13:16
    Moderator
  • Hallo Wazz,

    bist Du weitegekommen?

    Gruß

    Aleksander


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht,  kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 31. März 2015 08:04