【问题标题】:Query returning unfollowed users result查询返回未关注用户结果
【发布时间】:2014-07-13 03:30:27
【问题描述】:

首先,这将是相当漫长和复杂的。所以,如果你通读它,谢谢。

所以我在 PHP 中有一个关注和发布系统。所以我可以关注Alex,我会在主墙上看到亚历克斯的帖子以及我的帖子。如果我取消关注他,我就不会看到他的帖子。这就是查询的样子

SELECT * 
FROM posts 
WHERE post_user IN ( SELECT follow_from 
                     FROM followers 
                     WHERE follow_to = :user 
                      OR follow_from = :user ) 

这会从您关注的人那里获取帖子。威尔斯这就是它应该做的。这是帖子的样子

+----+-----------+---------+------------------------+--------------+------------+
| id | post_user | post_ip | post_date              | post_content | post_likes |
+----+-----------+---------+------------------------+--------------+------------+
| 40 | idris     | ::1     | 07/09/2014 11:19:47 pm | I like food  | 0          | 
+----+-----------+---------+------------------------+--------------+------------+

现在说Scott,它是另一个用户,登录。他走到他的墙上,他可以看到我的帖子,即使他没有关注我。这就是我遇到的问题。这是followers 表

+-----+-------------+-----------+
| id  | follow_from | follow_to |
+-----+-------------+-----------+
| 358 | idris       | scott     |
+-----+-------------+-----------+

当我看我的墙时,我也希望看到他的帖子。但我什么也没看到(当数据库中有帖子时)。所以基本上我的问题是,为什么Scott 会在他的墙上看到我的帖子,即使他没有关注我。

我有很多代码,但我会尝试在重要部分上发布

我如何运行查询

$qry = $con->prepare("SELECT * 
                      FROM posts 
                      WHERE post_user IN ( SELECT follow_from 
                                           FROM followers 
                                           WHERE follow_to = :user 
                                            OR follow_from = :user )");
$qry->bindValue(':user', $username, PDO::PARAM_STR);
$qry->execute();

我如何检查用户是否关注

if($_SESSION['loggedIn'] == true){
    $result1 = $con->prepare("SELECT * 
                              FROM followers 
                              WHERE follow_from = :user 
                              AND follow_to = :post_id");
    $result1->bindParam(':user', $username);
    $result1->bindParam(':post_id', $username);
    $result1->execute();
    $reprint = $result1->fetch(PDO::FETCH_ASSOC);
}

if($reprint > 1){
    $usr_flw = true;
}
else{
    $usr_flw = false;
}

最后我如何回复帖子

    $posts = array();
    while($row = $qry->fetch(PDO::FETCH_ASSOC)){
        $posts[] =  array(
        'post_user' => $row['post_user'],
        'id' => $row['id'],
        'post_date' => $row['post_date'],
        'post_likes' => $row['post_likes'],
        'post_content' => $row['post_content']
    );
    }   

【问题讨论】:

  • 你能解释一下 follow_to 和 follow_from 吗?此外,在您的示例中,似乎 Scott 是数据库中的那个,所以通常他应该看到它。

标签: php mysql sql database


【解决方案1】:

试试这个:

SELECT * FROM posts WHERE post_user IN ( SELECT follow_to FROM followers WHERE follow_from = :user) OR post_user = :user

【讨论】:

    【解决方案2】:

    假设 follow_from 是关注者,follow_to 是关注用户,您的 子查询 应该如下所示:

    ( SELECT follow_to FROM followers WHERE follow_from = :user )
    

    这将返回被提供的用户关注的用户。

    【讨论】:

    • 是的,但他也需要 IN 外的 OR 才能获得自己的帖子。
    • @Bob 对于这个特定的查询,没有明确指出自己的帖子,但如果是这样的话,你的答案会更完整:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多