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