我正在尝试将用户的新闻Feed更改为仅显示来自朋友的帖子,而不是来自网站上的所有用户。我设法做了这样的事情:
function friend_posts(){
global $session_user_id;
if(friends_exist($session_user_id) === true){
$friends = mysql_query("SELECT * FROM `friendship` WHERE `user_id` = $session_user_id AND `pending` = 0");
while($friend = mysql_fetch_array($friends)){
$friendID = $friend['friend_id'];
$posts = mysql_query("SELECT * FROM `posts` WHERE `userid` = $friendID ORDER BY `timestamp` DESC");
while($post = mysql_fetch_array($posts)){
$friendData = user_data($post['userid'],'username','first_name','last_name');
echo $friendData['username'].": ".$post['status']."<br>";
}
}
} else {
echo "Nothing to display. Try adding some friends!";
}
}
然而,这并不方便。例如,如果我想分页,我不知道我是怎么开始用这样的东西做的。此外,如果多个用户发布,我将如何通过'timestamp'降序对它们进行排序?
我猜我唯一可以采取的方法是以某种方式从多个表中访问列,然后按timestamp
排序,该posts
存储在friendship
表中。 id
表格只有user_id
,friend_id
,pending
和{{1}}。
我该怎么做呢?有没有更简单的方法来做我想做的事情?
我对SQL很新。除插入/删除/更新外,我不太了解。
答案 0 :(得分:1)
您可以使用以下单个语句:
SELECT * FROM posts WHERE userid in
(SELECT friend_id FROM friendship WHERE user_id = $session_user_id AND pending = 0)
ORDER BY `timestamp` DESC
这样您只能获得当前用户朋友的帖子。如果您还需要friendship
表中的数据,请使用join。