私は、SQLテーブルを読み込んでSQLテーブルを照会し、ユーザーの現在の友人のリストをdatagridviewに表示するチャットアプリケーションを作成しています。私が持っている問題は、現在のユーザーが友達リストにも表示されることです。結果に自分のユーザー名を返すSELECTクエリ
テーブルのレイアウトは次のとおりです。
create table Friendships
(
FriendshipID int IDENTITY(100,1) Primary Key,
ReceiverID int,
SenderID int,
Approved bit,
)
誰かが要求を送信すると、行はSENDERIDとReceiverID、そのまま彼らはそれを送った人のように自分のIDを持つテーブルに作成されます誰かがその人にフレンドリクエストを送信した場合、その反対であり、受信者がフレンドリクエストを受け入れるまで、「Approved」は0に設定されます。 datagridviewにデータを入れるには、テーブルを照会して、現在のユーザーが送信者または受信者のいずれかであるすべてのレコードを返し、友人である人物を表示する必要があります。各関係は1回だけ表示する必要があります。私が試したクエリの
一つでした:@Current_User_IDは、ユーザのIDでログインして電流を使用してパラメータ化され
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
。私はすべての方法の結合、SELECT DISTINCT、およびサブクエリを無駄なく試しました。上記のクエリの結果は、ログインしたユーザーの情報を持つものと、IDが送信者または受信者のものを持つものの2つの行を返し、「承認済み= 1」を完全に無視します。 "Approved = 0"の行を返します。
where句に関する操作の順序、実際の条件がわからない、または操作の順序が実際にどのようなものかを確認する必要があります。 –
オペレーションの順序を確かめ、ANDとOR文を組み合わせるときに '()'と '())'を使う場所と方法を理解しておいてください。 SQLは、私が 'テーブルエイリアスを使用する方法を学ぶことをお勧めします'誰があなたのWHERE節でIDのテーブルが何であるか知っていると思いますか? – MethodMan
なぜあなたのテーブルの最後にカンマがあるのですか?承認ビットを作成します。 – MethodMan