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

时间:2015-06-18 09:12:50

标签: 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

userstatusposts

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

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

从关注者表中可以看到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';
                    }
                  }

                }
              ?>

我知道这里有其他的cols,但它们在上面列出的表中我刚刚将它们留给了问题。

为什么我的SQL代码会带回错误信息的任何建议,这是我看到的显而易见的事情吗?

2 个答案:

答案 0 :(得分:0)

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

你应该改变

WHERE followers.beingFollowedUserID='$userid' 

WHERE followers.followerUserID = '$userid' 

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

$userid = (int)$userid

// .. now $userid is safe to use in $sql

答案 1 :(得分:0)

问题是其中一个JOINS正在寻找错误的领域。

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

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