友達の友達と、そのユーザーとの相互友達の数を表示する機能を開発しようとしています。これまでのところ、私は機能を別々に行うことができましたが、一緒に行うことはできませんでした。
これが私が使用しているuserfriendsと呼ばれるメインビューです。ここで、user1は最初のユーザーで、user2は友達です。
これは、2人のユーザー間の相互の友達を見るために私が開発した機能です
SELECT id FROM users
WHERE id IN (
SELECT user2 FROM userfriends WHERE user1 = me
) AND id IN (
SELECT user2 FROM userfriends WHERE user1 = second
)
Usersは、userfriendsテーブルにあるユーザーIDをユーザーに関する情報にリンクできるメインテーブルです。Meとsecondは、1番目と2番目のユーザーの検索をエミュレートするストアドプロシージャの変数です。この関数は計画を立てるために機能します。
私が持っている2番目の機能は、私の友達とは友達であるが、私とは友達ではないすべてのユーザーを表示することです。
SELECT user2 AS id
FROM userfriends
WHERE user1 IN (
#Selects my friends
SELECT user2 FROM userfriends
WHERE user1 = me
)
AND user2 <> me #Makes sure is not me
AND user2 NOT IN ( #Makes sure not already friend
SELECT user2 FROM userfriends
WHERE user1 = me
)
繰り返しになりますが、計画に取り組んでいるすべての人と私はユーザーIDを表しています。これにより、すべての友達の友達のリストが返されます。
相互ユーザーのリストや友達の友達のリストの代わりに取得できるようにしたいのは次のとおりです。
友達の友達のユーザーIDと、私とそのユーザーが共有する相互の友達の数を含むテーブル。その他:user:1、friends_in_common:103。十分に明確でない場合は、質問してください。明確にするよう努めます。2つの関数はそれ自体でそれを行いますが、それをマージする方法がわかりません。