繁体   English   中英

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

[英]Compare columns from multiple tables in one query PHP/SQL

我正在尝试将用户的新闻提要更改为仅显示朋友的帖子,而不是网站上所有用户的帖子。 我这样做是这样的:

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!";
    }
}

但是,这并不方便。 例如,如果我想分页,我什至不知道怎么开始使用类似的方法。 另外,如果有多个用户发帖,我该如何按“时间戳”降序对它们进行排序?

我猜我唯一可以采取的途径是以某种方式访问​​多个表中的列,然后按存储在posts表中的timestamp进行排序。 friendship表仅具有iduser_idfriend_idpending

我将如何去做? 有没有更简单的方法可以做我想做的事情?

我对SQL非常陌生。 除了插入/删除/更新外,我不了解太多。

您可以使用单个语句,如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM