2014-07-16 70 views
1

我有一個由其他用戶組成的用戶組成的mysql表。獲取關注特定用戶的用戶列表,並檢查我是否關注他們

USER_ID FOLLOW_ID 
1  2 
1  3 
2  4 
3  4 
6  4 
2  6 

我的用戶第2號和人的問題是用戶號4.您看到三個人以下的用戶四號包括我在內。我可以查詢關注用戶4的用戶。如果我關注這些人,我該如何添加到查詢中?所以我想知道的是,誰在追蹤一個特定用戶(本例中是第4號),以及我正在關注他們中的哪一個。

期望的結果:

USER_ID (No.4 is FOLLOWED BY), DO_I_FOLLOW_HIM 
2        No 
3        No 
6        Yes 

正如你從表中的最後一條記錄看我(第2號)是跟着用戶6號。

查詢人以下的用戶四號名單:

$myid = '6'; 
$userid = '4'; 
    $i = 0; 
    try { 
     $stmt = $conn->prepare("SELECT USER_ID FROM FOLLOW WHERE FOLLOW_ID=?"); 

     $stmt -> execute(array($userid)); 
      while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
       $row2[$i] = $row['USER_ID']; 
       $i++;    
      } 
     } catch(PDOException $e) { 
     echo 'ERROR: ' . $e->getMessage(); 
     $response["success"] = 0; 
    } 

樣品SQL小提琴求助:http://sqlfiddle.com/#!2/97ac6

回答

0

爲了讓您按照用戶的列表,下面是另一個給定用戶,您需要使用子查詢。你可以看到它上面寫的你問兩件事

  1. 誰是下一個人
  2. 從這個名單我在下面誰的時候。

所以你可以嘗試使用像這樣的查詢,

Select User_ID, Follows_ID 
From  Follows 
Where  User_ID = ? 
And  Follow_ID In (Select User_ID From Follows Where Follow_ID = ?) 

要查看列表,並不管你是跟隨

Select f.User_ID, 
     Case When ? In (Select User_ID From Follows Where Follow_ID = f.User_ID) Then 'Yes' Else 'No' End 
From  Follows f 
Where f.Follow_ID = ? 

@Shudder使得一個好點,你可能會看到通過使用聯接而不是子查詢來提高性能(特別是如果這是一個大表)。

SELECT him.user_id, IF(i.follow_id,'yes','no') AS i_follow_him 
FROM Follows him 
LEFT JOIN Follows i ON (i.follow_id = him.user_id AND i.user_id = ?) 
WHERE him.follow_id = ? 
+0

@Cheruvian嗨。你試過了嗎?它只列出我。 http://sqlfiddle.com/#!2/97ac6/8 – erdomester

+0

請嘗試選擇follow_id以查看您關注的是他們的追隨者之一。 – Cheruvian

+0

這給我只有一個ID,這是我跟隨第4個用戶的那個ID。我需要所有三名3人跟蹤該特定用戶。 – erdomester

-1

我可以更容易通過添加自己的ID和用戶否4.

select follow_id 
from follows 
where user_id=2 and follow_id IN (select user_id from follows where follow_id=4) 
1
SELECT him.user_id, IF(i.follow_id,'yes','no') AS i_follow_him 
FROM Follows him 
LEFT JOIN Follows i ON (i.follow_id = him.user_id AND i.user_id = 2) 
WHERE him.follow_id = 4 
相關問題