Fragensteller
Abfrageproblem Freundestabelle

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
- Bearbeitet WaZZkeSS Dienstag, 17. März 2015 12:12
- Typ geändert Aleksander Chalabashiev Freitag, 3. April 2015 10:11 keine Rückmeldung
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
- Bearbeitet Stefan FalzModerator Dienstag, 17. März 2015 12:40
-
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 LgWaZZ
-
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 -
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.