Ich erstelle eine Chat-Anwendung, die eine SQL-Tabelle beim Laden abfragt, um eine Liste der aktuellen Freunde des Benutzers in einer Datagridview anzuzeigen. Das Problem, das ich habe, ist der aktuelle Benutzer erscheint auch in der Freundesliste.SELECT-Abfrage, die eigenen Benutzernamen in Ergebnissen zurückgibt
Das Layout für die Tabelle ist:
create table Friendships
(
FriendshipID int IDENTITY(100,1) Primary Key,
ReceiverID int,
SenderID int,
Approved bit,
)
Wenn jemand eine Anfrage sendet, wird eine Zeile in der Tabelle mit ihrer ID als SenderID und der Person, erstellt sie ihm geschickt, wie die ReceiverId und es ist das Gegenteil, wenn jemand dieser Person eine Freundschaftsanfrage sendet, und "Approved" wird auf 0 gesetzt, bis der Empfänger die Freundschaftsanfrage annimmt. Um den Datagridview aufzufüllen, muss ich die Tabelle abfragen und alle Datensätze zurückgeben, in denen der aktuelle Benutzer entweder der Absender oder der Empfänger ist, und die Person anzeigen, mit der sie befreundet sind. Jede Beziehung muss nur einmal angezeigt werden.
Einer der Anfragen habe ich versucht war:
SELECT UserID, Username, Status
FROM Arwen_Friendships, Arwen_Users
WHERE ReceiverID = UserID
OR SenderID = UserID
AND ReceiverID = @Current_User_ID
OR SenderID = @Current_User_ID
AND Approved =1
wo @Current_User_ID parametriert wird, um den Strom in Benutzer-ID angemeldet werden. Ich habe alle Arten von Verknüpfungen, SELECT DISTINCT und Unterabfragen ohne Glück versucht. Das Ergebnis der obigen Abfrage gibt zwei Zeilen zurück: eine mit den Informationen des angemeldeten Benutzers und eine mit der Person, deren ID der Absender oder der Empfänger ist, und ignoriert vollständig "Approved = 1". Es wird Zeilen mit "Approved = 0" zurückgegeben.
Sie sollten Ihre Reihenfolge der Operationen auf der WHERE-Klausel überprüfen, es ist unklar, was die Bedingung tatsächlich ist oder wie die Reihenfolge der Vorgänge tatsächlich ist. –
Überprüfen Sie auf jeden Fall die Reihenfolge der Operationen und verstehen Sie das 'Wo und Wie'' zu verwenden'() 'vs' (()) 'beim Kombinieren von AND und OR-Anweisungen können Sie alle' AND innerhalb eines einzigen() 'ein paar grundlegende Sql ist was ich empfehlen würde auch lernen, 'Table Aliasing' zu verwenden, wie soll jemand wissen, aus welcher Tabelle die IDs in Ihrer WHERE-Klausel stammen. ??? – MethodMan
Warum gibt es ein zusätzliches Komma am Ende Ihrer Tabelle erstellen 'Genehmigte Bit,' – MethodMan