2

ログインしているアカウント所有者がフォローしている人々からのすべての投稿を表示する効率的な方法を見つけようとしています。

次の 2 つのキー テーブルがあります。

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でUPDATEを試みています

現時点では 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);

    }

ログインしているアカウントが他のアカウントをフォローしていても、返されるデータは現時点では NULL です。

4

2 に答える 2

7
$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."')";
于 2013-03-12T15:32:18.720 に答える
1

私はあなたの質問を解釈する方法でこれを書きます。

あなたがする必要があるのはあなたのログインしたユーザーが続くユーザーからの投稿だけを選択することです。

これを分類するには、最初にユーザーを選択し、次にログインしたユーザーを選択します。これを行うには、Followsテーブルを使用します。

次に、これらのユーザーによる投稿を選択します。そのため、私のクエリはこれになります。

SELECT posts.* FROM follows
    LEFT JOIN posts ON posts.account_name = follows.follows_name
    WHERE follows.account_name = $logged_in_user
于 2013-03-12T15:33:06.100 に答える