Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Follow/unfollow工具PHP/mySQL_Php_Mysql - Fatal编程技术网

Follow/unfollow工具PHP/mySQL

Follow/unfollow工具PHP/mySQL,php,mysql,Php,Mysql,我确信我遗漏了一些明显的东西,或者我为这个工具编写的mySQL代码是不正确的 我得到的是一个允许人们互相关注的网站。如果他们正在跟踪一个用户,他们应该在用户仪表板中看到他们的更新 在mySQL查询中,我不得不将几个表绑定在一起以获得相关信息 这是桌子 使用者 用户信息 ID UserID UserPhoto -------------|---------------|------------------ 1 1

我确信我遗漏了一些明显的东西,或者我为这个工具编写的mySQL代码是不正确的

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

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

这是桌子

使用者

用户信息

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';
                    }
                  }

                }
              ?>

我知道这里还使用了其他COL,但它们在上面列出的表格中,我只是将它们排除在问题之外


任何关于我的SQL代码返回错误信息的建议,是不是有什么明显的问题让我忽略了?

您的查询返回的是追随者的所有状态,而不是追随者的状态

你应该改变

WHERE followers.beingFollowedUserID='$userid' 

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

$userid = (int)$userid

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

问题是其中一个联接正在寻找错误的字段

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

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

感谢有关$userid的信息,但是where更改引发了第二个问题,正如您所说的,where显示了登录用户的状态,尽管他们没有跟随自己。
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