2014-04-05 51 views
0

我試圖找到用戶的帖子,我沒有跟隨但與他們分享相同的興趣。MySQL查詢同樣的興趣

我有這樣的表結構:

帖子 - 帖子ID,用戶名,踵

用戶 - 用戶名,姓名

關注 - 用戶名,FollowerID

Intere STS - InterestID,InterestName

UserInterests - 用戶名,InterestID

任何想法,我怎麼能做到這一點?

到目前爲止,我已經做到了這一點:

select * from posts p 
inner join users u on u.idUsers = p.idUsers 
where p.idusers <> 1 
and p.idusers not in (
-- Gets the users whom I am Following 
select users.idUsers 
from users 
    inner join followers f on (f.idUsers=users.idUsers) 
    inner join users u on (u.idUsers=f.FollowerID) 
where f.FollowerID = 1 
) 
+2

考慮提供適當的DDL(和/或sqlfiddle)連同SET – Strawberry

+0

多遠確實想要的結果你當前的查詢得到你嗎?它有什麼作用?我認爲你是用戶ID 1? (我想你只需要修改你的子選擇:如果這樣做會得到你關注的用戶,你只需要考慮到你與誰共享興趣)。 – halfer

回答

0

這是非常相似的另一個問題,我最近回答過基於「共同利益」(或資源,在其他職位)。

首先,從您擁有的這些興趣的單個查詢開始,並獲得那些不是您的獨特用戶。然後得到那些你是追隨者的人,而用戶不是你已經追隨的人。

一旦你擁有了這些,它的一個簡單加入到帖子中的用戶ID

爲了優化這個查詢,你的表,你應該有以下指標

表索引 UserInterests(用戶ID) UserInterests(interestid,用戶ID) 關注者(用戶ID,followerid) 帖子(用戶ID,事後日期)

此外,如果你想限制的職位,如通過日期當前,你可能想的是要建立索引如上所示,以幫助輕鬆地將日期標準應用到最終加入到帖子表中...加入帖子上的用戶ID和postDate> =某個日期值...

我試圖用明確表之間的邏輯關係之間多餘的換行符遵循A-> B-> c爲如何處理越來越

SELECT 
     P.* 
    from 
     (select distinct 
       OtherUser.userid 
      from 
       UserInterests Me 

       JOIN UserInterests OtherUser 
        ON UI1.InterestID = OtherUser.InterestID 
        AND NOT Me.UserID = OtherUser.UserID 

        LEFT JOIN Followers F 
         ON OtherUser.UserID = F.UserID 
         AND Me.UserID = F.FollowerID 

      where Me.UserID = MyUserID 
       AND F.UserID IS NULL) as UsersNotFollowed 

     JOIN Posts P 
     ON UsersNotFollowed.UserID = P.UserID