2016-03-16 25 views
1

我想知道如何獲取用戶關注者列表和他/她關注他們的狀態。例如,我有10個關注者,我需要知道我是否關注他們。這是Instagram上的一個功能,當你可以觀察人並觀察時。關於關注者列表的Mysql查詢

我有一個表:

follower  user_id  reg_dt  followed 
    1   2   date   true 

在上面提到的示例用戶1之後是用戶2,如果用戶將停止關注,該標誌將是假的,但它會在DB中。

我想要實現:

follower  user_id  reg_dt  followed  logged_user_follower 
    1   2   date  true    false 

這意味着,用戶1之後是用戶2,但用戶1不以下用戶2

我試圖2個查詢:

select follower.follower_id as follower, follower.user_id as user_id, follower.followed as followed, follower.reg_dt as reg_dt 
from tb_follower follower 
where follower.follower_id=1 and follower.followed=1; 

以獲得(用戶1的)追隨者列表和:

select 1 as logged_user_follower from tb_follower follower 
where follower.follower_id=follower.follower_id and follower.followed=1 and follower.user_id = follower.user_id limit 1 

獲取狀態logged_user_follower。

我不知道如何合併這個查詢,做一個有效的,以獲得特定用戶的所有追隨者和他/她的追隨者的狀態。

任何幫助將不勝感激。 謝謝。

+0

旁註:你認爲只是增加了對以下用戶1用戶2,而不是使用logged_user_follower列中的記錄?因此,如果用戶1和用戶2彼此關注,那麼它們在跟隨者表中都會有記錄。 –

+0

是的,我有記錄,但我需要一次獲取所有數據,以創建某種方式與此logged_user列視圖,我不太確定,如何爲特定用戶做到這一點。我不想遍歷所有用戶。 –

+0

如果您使用的是mysql連接,則不會覆蓋所有用戶。這不是一個循環。 –

回答

1

我想你可以使用一個LEFT JOIN得到逆記錄:

select f1.follower_id as follower, 
     f1.user_id as user_id, 
     f1.followed as followed, 
     f1.reg_dt as reg_dt, 
     coalesce(f2.followed, false) as logged_user_follower 
from tb_follower f1 
left join tb_follower f2 
    on f1.follower_id = f2.user_id and f1.user_id = f2.follower_id 
where f1.follower_id = 1 and f1.followed = 1; 
+0

它的工作原理,但它可以得到true或false而不是blob作爲logged_user_follower? –

+0

@ m.aibin你的意思是將'true'或'false'作爲字符串? –

+0

不,它可能是1或0,但我得到blob在logged_user_follower列作爲結果 –