2013-03-12 83 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