0

これが私のDBのスキーマです:

id | user1 | user2 | status  //status 1 means the user is a friend
 1     1       2      1
 2     3       1      1    
 3     1       4      1
 4     2       3      1
 5     4       2      1 

上記の例では

  1. userId 1 には 3 人の友達がいます 2,3,4
  2. userId 2 には 3 人の友人がいます。3,4,1
  3. userId 3 には 2 人の友人がいます: 1,2
  4. userId 4 には 2 人の友人がいます。つまり、1,2 です。

2 人の共通の友達を見つける必要があります。

何か案は、

4

2 に答える 2

1

これが最善の解決策であるかどうかはよくわかりません。しかし、多分このようなもの:

SELECT
    *
FROM
(
    SELECT
        CASE WHEN t2.user1=1 THEN t2.user2 ELSE t2.user1 END AS userId
    FROM
        t AS t2
    WHERE 1 IN (t2.user1,t2.user2)
    AND t2.[status]=1
) as tbl
WHERE EXISTS 
(
    SELECT
        NULL
    FROM
        t
    WHERE 2 IN (t.user1,t.user2)
    AND tbl.userId=(CASE WHEN t.user1=2 THEN t.user2 ELSE t.user1 END)
    AND t.[status]=1
)

これにより、ユーザー1と2から相互の友達が得られます。これは3,4です。

于 2013-02-15T12:56:20.680 に答える
0

私が見る限り、このクエリで十分です。ここで、{x}はuserA、{y}はuserBです。

select user2 
from friends
where user1 = {x}
and status = 1
and user2 in (
 select user2 
 from friends
 where user1 = {y}
 and status = 1
)
于 2013-02-15T13:00:18.427 に答える