关注/取消关注工具 PHP/mySQL


Follow/unfollow tool PHP/mySQL

我确定我错过了一些明显的东西,或者我为这个工具编写的mySQL代码不正确。

我得到的是一个允许人们互相关注的网站。如果他们关注用户,他们应该在用户仪表板中看到他们的更新。

我不得不在mySQL查询中将几个表绑定在一起以获取相关信息。

以下是表格

用户

ID                Username           Password
-------------|---------------|------------------
    1              User1         UserPass
    2              User2         UserPass
    3              User3         UserPass

user_details

ID                UserID           UserPhoto
-------------|---------------|------------------
    1              1            User1photo.jpg
    2              2            User2photo.jpg
    3              3            User3photo.jpg

用户状态帖子

UserStatusID       UserID           status
-------------|---------------|------------------
    1              1            Hey My first post
    2              2            Woah this is cool
    3              3            It doesnt work

追随 者

followid       followerUserID   beingFollowedUserID
-------------|---------------|------------------
    1              3            1

这些表中有更多的列和行,但这是问题的基本形式。

正如您从关注者表中看到的那样,User3 正在关注 User1,因此应该能够看到他们在 userstatusposts 中发布的帖子,用户详细信息和用户也需要绑定的原因是我可以显示用户照片和用户用户名

我目前无法正常工作的SQL是:

SELECT * FROM userstatusposts 
                JOIN followers ON userstatusposts.userid = followers.followeruserid 
                JOIN users ON userstatusposts.userid = users.id 
                JOIN user_details ON userstatusposts.userid = user_details.userid 
                WHERE followers.beingFollowedUserID='$userid' 
                ORDER BY userstatusposts.userstatusid DESC
                LIMIT 10

然而,这一切都是错误的,因为我在我的PHP代码中实现时看到了错误用户的帖子($userid是登录用户)。

PHP页面:

 <?php
                $sql = "SELECT * FROM userstatusposts 
                JOIN followers ON userstatusposts.userid = followers.followeruserid 
                JOIN users ON userstatusposts.userid = users.id 
                JOIN user_details ON userstatusposts.userid = user_details.userid 
                WHERE followers.beingFollowedUserID='$userid' 
                ORDER BY userstatusposts.userstatusid DESC
                LIMIT 10
                ";
                $result = $conn->query($sql);
                $rowcount=mysqli_num_rows($result);
                if ($rowcount === 0) {
                  echo '<li style="list-style-type: none;"><p>Your not currently folllowing anyone.</p></li>';
                } else {
                  while($row = $result->fetch_assoc()) {
                    if ($row['posttype'] == 'message') {
                      echo '<li style="list-style-type: none;"><a href="#"><img src="userimg/'.$row['userphoto'].'" height="90px" width="90px"></a><h3><a href="#">'.$row['username'].'</a></h3><small>17/06/2014</small><p>'.$row['status'].'</p></li>';
                    }
                    else if ($row['posttype'] == 'map') {
                      echo '<li style="list-style-type: none;"><a href="#"><img src="userimg/'.$row['userphoto'].'" height="90px" width="90px"></a><h3><a href="#">'.$row['username'].'</a></h3><p>has recently added <b>'.$row['status'].'</b> to there travel map</p></li>';
                    }
                    else if ($row['posttype'] == 'like') {
                      echo '<li style="list-style-type: none;"><a href="#"><img src="userimg/'.$row['userphoto'].'" height="90px" width="90px"></a><h3><a href="#">'.$row['username'].'</a></h3><p>has recently liked a trip report called <b>'.$row['status'].'</b></p></li>';
                    }
                    else if ($row['posttype'] == 'report') {
                      echo '<li style="list-style-type: none;"><a href="#"><img src="userimg/'.$row['userphoto'].'" height="90px" width="90px"></a><h3><a href="#">'.$row['username'].'</a></h3><p>has recently shared a trip report called <b>'.$row['status'].'</b></p></li>';
                    }
                    else {
                      echo 'We are currently expirencing a few diffculties';
                    }
                  }
                }
              ?>

我知道这里还有其他列,但它们在上面列出的表格中,我只是将它们排除在外。

任何建议为什么我的SQL代码带回错误的信息,是我忽略了什么明显的东西吗?

查询返回关注者的所有状态,而不是关注者的状态。

你应该改变

WHERE followers.beingFollowedUserID='$userid' 

WHERE followers.followerUserID = '$userid' 

此外,这与您的问题无关,但您的代码存在安全问题。在查询中使用$userid之前,应先对其进行清理。

$userid = (int)$userid
// .. now $userid is safe to use in $sql

问题是其中一个 JOIN 查找错误的字段。

SQL应该是:

JOIN followers ON userstatusposts.userid = followers.beingFollowedUserID 

所以完整的声明是

SELECT * FROM userstatusposts 
                JOIN followers ON userstatusposts.userid = followers.beingFollowedUserID 
                JOIN users ON userstatusposts.userid = users.id 
                JOIN user_details ON userstatusposts.userid = user_details.userid 
                WHERE followers.followerUserID = '$userid'  
                ORDER BY userstatusposts.userstatusid DESC
                LIMIT 10

这是我的一个朋友而不是我解决的,但我想我会为任何感兴趣的人分享答案。