2013-03-12 88 views
0

我試圖找到一種有效的方式來顯示登錄帳戶持有人跟蹤的人的所有帖子。SQL:選擇所有帖子從關注者

有兩個關鍵表:

1-帖子

表名:posts

idaccount_namepublished, body

2-遵循

表名:follows

idaccount_namefollowed_name

我試圖找到,我可以從所有正在遵循的賬戶顯示所有帖子的方式。帖子和關注之間的連接是Account_name

我知道它可能是一個連接,但它是我如何構造WHERE子句。到目前爲止,我有以下(帳戶名通過$ _SESSION [「ACCOUNT_NAME」]設置):

$sql = "SELECT * FROM posts LEFT JOIN follows ON posts.account_name = follows.account_name WHERE --- How would I only get the posts from the accounts being followed ?---" 

我敢肯定,這是簡單的東西我的大腦只是感覺耗盡,我似乎無法工作了。

更新PDO

試圖在此刻返回NULL,

$sql = "SELECT * FROM share_posts WHERE account_name IN (SELECT followed_name FROM $this->account_follows WHERE account_name = :account_name)"; 
    return $this->AC->Database->select($sql, array('account_name' => $account_name)); 

的進入我的數據庫類:

public function select($sql, $array = array(), $fetch_mode = PDO::FETCH_ASSOC) 
    { 

     $stmt = $this->AC->PDO->prepare($sql); 

     foreach ($array as $key => $value) 
     { 
      $stmt->bindValue("$key", $value); 
     } 

     $stmt->execute(); 

     return $stmt->fetchALL($fetch_mode); 

    } 

返回的數據是目前空連儘管登錄賬戶已經跟隨其他賬戶。

+0

你能澄清一下,是不是ACCOUNT_NAME的情況如下followed_name,或者是followed_name如下ACCOUNT_NAME(誰是下誰從該表) – CodePB 2013-03-12 15:29:53

+0

有什麼不對您的查詢「原樣」(無WHERE子句)? – 2013-03-12 15:35:07

+0

@pburgess Account_name是已登錄的帳戶,而Following_name是正在遵循的帳戶...因此,account_name的follow_name爲 – HireLee 2013-03-12 15:51:00

回答

1
$account = $_SESSION['account_name']; 

//do some sql injection checking on $account here 

$sql = "SELECT * FROM posts WHERE account_name IN (SELECT followed_name FROM follows WHERE account_name='".$account."')"; 

這將獲得帳戶名與您關注的人匹配的所有帖子。我不確定誰跟隨誰,但在這種情況下,followed_name是人員account_name所關注的人員。如果這是相反的方式,切換值

$sql = "SELECT * FROM posts WHERE account_name IN (SELECT account_name FROM follows WHERE followed_name='".$account."')"; 
0

我會寫我這樣解釋你的問題的方式。

您需要做的是隻選擇用戶後面跟着登錄用戶的帖子。

要解決這個問題,首先要選擇登錄用戶後面的用戶。爲此,我們使用Follows表。

然後我們想要選擇這些用戶的帖子。這樣我的查詢就是這樣。

SELECT posts.* FROM follows 
    LEFT JOIN posts ON posts.account_name = follows.follows_name 
    WHERE follows.account_name = $logged_in_user