0

私はクエリの初心者で、そのうちの1つに苦労しています。関連する2つのテーブルは次のとおりです。

UserAndAddFriends

askstobefriendsテーブルを使用すると、ユーザーは開発中のアプリケーションに友達を追加できます。それの関係形式は次のとおりです。

AskToBeFriends(ID(long)、#UserAsker(long)、#UserAsked(long)、Accept(tinyInt))

したがって、このテーブルを使用すると、誰が友達になりたいか、そしてそれが受け入れられたかどうかを確認できます...

私が実現しようとしているクエリでは、IDからすべてのユーザーの友達を一覧表示し、友情の法令を返すことができます(accept field ==>回答を待っている、受け入れられた、または拒否された)。

Speretaly、それはそのようなものになるでしょう:

SELECT Accept, UserAsker, UserAsked
FROM askstobefriends        
WHERE UserAsker = '".$userID."' OR UserAsked = '".$userID."' ";

==>最初の問題:誰かと友達になるように頼んだユーザーか反対者のどちらかである可能性があります。その後、私はこれらの情報が設立されたすべての友人のためにそれを望んでいます:

SELECT colUserID, colUserLogin, colUserName, colUserFirstname
FROM userTable
WHERE colUserID == FRIEND

したがって、結合クエリを実行する必要があると思います。結合では、それぞれの場合に、asktobefriendsテーブルの正しい外部キーを使用していることを確認する必要があります。(キーはUserAskedである可能性があり、別の場合は、誰が友達になるように要求したかに応じてUserAskerである可能性があります:S)

誰か手がかりを持っていますか:S ?? ありがとう ;-) !!

4

2 に答える 2

1

の友達だけが返されることを保証する基準を使用してテーブルを結合することができます。:userID例えば:

SELECT u.*, a.Accept
FROM   askstobefriends a JOIN userTable u ON (:userID, u.colUserID) IN (
         (a.UserAsker, a.UserAsked),
         (a.UserAsked, a.UserAsker)
       )
于 2012-06-06T13:35:20.820 に答える
1

あなたのデザインは間違っています。ユーザーが別のユーザーの友達になるように要求するため、「Ask_to_be_friend」が関係であり、カーディナリティは多対多であるため、デザインは次のようになります。

User_User_IDはUserAskerです。

User_USer_ID1はUserAskedtobefriendです

ここに画像の説明を入力してください

クエリは次のようになります(user_user_IDが友達になるように要求するすべてのユーザーを取得します):

Select U.* from User as U
Join Ask_to_be_friend as A on
U.user_ID = A.User_user_ID 
--where a.accept=1  if you add this, this will give 
--you all the friends ID of the user_ID table User

asktobefriendの名前や追加情報を取得したい場合は、追加の参加が必要になります

Select U.* from User as U
Join Ask_to_be_friend as A on
U.user_ID = A.User_user_ID
Join User as U2 on
A.User_User_ID1=u2.User_ID 
 --where a.accept=1 ,with this you'll with get only the friends
于 2012-06-06T13:46:12.407 に答える