1

id、email、username、firstname、lastnameの各フィールドを持つusersという名前のテーブルがあります。

フィールドid、user1、user2、およびrelationshipを持つfriendsという名前の別のテーブルがあります。

私はこの結合クエリで本当に苦労していますが、それほど難しいことではありません:(。

まだあなたと関係のない最も人気のあるユーザーを見つけたいです。たとえば、関係配列がすでに生成されていて、ユーザー情報と、まだあなたに関係のないユーザーである関係の量を見つけたいと思います。

これまでの私のクエリですが、何らかの理由で機能させることができません。

select id, email,username,firstname,lastname
from users as userInformation
     left join (select count(*)
                from friends
                where friends.user1 = userInformation.id or friends.user2 = userInformation.id
               ) as x
where users.id NOT IN (2,44,26,33,1)

パーツの「2,44,26,33,1」はnot in、ログインしているユーザーによって任意です。
私が正しく動作することができない部分は、関係カウントを追加する左結合です。

手伝うために、ここに機能する2つのクエリがあります。2番目のユーザーを結合して、各ユーザーの最初のクエリの列にする必要があります

 select id, email,username,firstname,lastname from users where id NOT IN (2,44,26,33,1)

 select count(*) from friends where user1 =2 or user2 = 2

ただし、2番目のクエリは、最初のクエリのIDごとに行う必要があります。それがそれをクリアすることを願っています。

これは近づいています

select id, email,username,firstname,lastname 
  from users as help
  left join (
      select count(*) 
        from friends 
       where user1 = help.id or user2 = help.id) as friendCounter
 where help.id NOT IN (2,44,26,33,1)

何らかの理由で、最後のwhere句でhelp.idを認識しません。

4

3 に答える 3

1

どのように'これについて?

select userinformation.id, email,username,firstname,lastname,count(*)
from users as userInformation
     left join  friends on friends.user1 = userInformation.id or friends.user2 = userInformation.id

where userInformation.id NOT IN (2,44,26,33,1)
group by email,username,firstname,lastname
于 2012-06-27T19:21:21.540 に答える
0
select * from (
    select id, email,username,firstname,lastname,count(*) N
        from users as userInformation
             left join  friends on friends.user1 = userInformation.id 
                                   or friends.user2 = userInformation.id

        where userInformation.id NOT IN (2,44,26,33,1)
        group by id,email,username,firstname,lastname) Aliased
order by N desc
于 2012-06-27T19:24:22.847 に答える
0

私が理解しているように、あなたの問題文を言い換えます。間違っている場合はお知らせください。

特定のユーザーについて、最も人気のある無関係なユーザーを見つけます。

declare @GivenUser as varchar(20)
set @GivenUser = '1'  --replace '1' here with the user id you want

select id, email, username, firstname, lastname, Connections
from userInformation u1
inner join (
    select TheUser, count(*) as Connections
    from (
        select user1 as TheUser
        from friends
        where user1 <> @GivenUser
        and user2 <> @GivenUser

        union all

        select user2 as TheUser
        from friends
        where user1 <> @GivenUser
        and user2 <> @GivenUser
        ) u
    group by User
    order by sum(Connections) desc
    ) u2
on u1.id = u2.TheUser
于 2012-06-27T20:40:52.587 に答える