在一个查询PHP / SQL中比较来自多个表的列

时间:2015-01-29 09:41:06

标签: php mysql

我正在尝试将用户的新闻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_idfriend_idpending和{{1}}。

我该怎么做呢?有没有更简单的方法来做我想做的事情?

我对SQL很新。除插入/删除/更新外,我不太了解。

1 个答案:

答案 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