Hir*_*Lee 1 php sql mysqli pdo
我试图找到一种有效的方式来显示登录帐户持有人所关注的人的所有帖子。
有两个关键表:
1- 帖子
表名: posts
id, account_name,published, body
2- 关注
表名: follows
id, account_name,followed_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 ?---"
Run Code Online (Sandbox Code Playgroud)
我确信这是一件简单的事情,我的大脑只是感到筋疲力尽,我似乎无法解决。
在 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));
Run Code Online (Sandbox Code Playgroud)
转到我的数据库类:
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);
}
Run Code Online (Sandbox Code Playgroud)
即使登录的帐户已关注其他帐户,此时返回的数据也是 NULL。
$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."')";
Run Code Online (Sandbox Code Playgroud)
这将获取帐户名称与您关注的人匹配的所有帖子。我不确定谁在关注谁,但在这种情况下,follow_name 是 account_name 关注的人。如果情况相反,请切换值
$sql = "SELECT * FROM posts WHERE account_name IN (SELECT account_name FROM follows WHERE followed_name='".$account."')";
Run Code Online (Sandbox Code Playgroud)