Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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
Php 从我自己和“朋友”的帖子中获取结果_Php_Mysql_Join - Fatal编程技术网

Php 从我自己和“朋友”的帖子中获取结果

Php 从我自己和“朋友”的帖子中获取结果,php,mysql,join,Php,Mysql,Join,我有一个我自己都搞不懂的问题。我尝试过使用左连接等,但似乎没有任何效果。我正在使用MySQL,所以你知道 我正在为我和我的朋友建立一个小型博客门户,所有用户都有自己的博客 数据库: 用户: 身份证件 用户名, 暗语 等 博客: 身份证件 标题 文本 用户id, 等 关系 追随者id, 以下是您的id 我查询我自己的博客帖子,如下所示: SELECT * FROM microblog WHERE user_id = {$user_id} ORDER BY posted DESC SELECT *

我有一个我自己都搞不懂的问题。我尝试过使用左连接等,但似乎没有任何效果。我正在使用MySQL,所以你知道

我正在为我和我的朋友建立一个小型博客门户,所有用户都有自己的博客

数据库:

用户: 身份证件 用户名, 暗语 等

博客: 身份证件 标题 文本 用户id, 等

关系 追随者id, 以下是您的id

我查询我自己的博客帖子,如下所示:

SELECT * FROM microblog WHERE user_id = {$user_id} ORDER BY posted DESC
SELECT * FROM users, relations WHERE relations.follower_id = {$user_id} AND relations.following_id = users.id
我的朋友名单如下:

SELECT * FROM microblog WHERE user_id = {$user_id} ORDER BY posted DESC
SELECT * FROM users, relations WHERE relations.follower_id = {$user_id} AND relations.following_id = users.id
这是最简单的部分。但是

我宁愿以某种方式加入表格,因为我还想在我的循环中列出我的朋友的博客帖子。但我不只是想让帖子显示出来,我还想知道发布该帖子的用户的一些信息,所以我也必须从users表中获取一些信息。这就是困扰我的!我想不出来

简而言之:我想在我自己的循环中列出我自己的博客帖子和我的朋友。我还想在帖子旁边显示用户名和电子邮件

希望你明白我的意思

/托拜厄斯

瑞典

试试这个

SELECT m.* 
FROM microblog m
INNER JOIN users u ON m.user_id = u.user_id
LEFT JOIN relations r ON r.following_id = m.user_id
WHERE m.user_id = {$user_id}
OR (r.follower_id = {$user_id} AND NOT IsNull(r.follower_id))
ORDER BY posted DESC
怎么样

select 
    u.username, 
    u.email, 
    m.title, 
    m.text 
       -- ... etc
from microblog m
     inner join user u on m.user_id = u.id
where  m.user_id = {$user_id} 
    or m.user_id in (select 
                         following_id 
                     from relations r 
                     where follower_id = {$user_id}
                    );

从我的角度来看,我会分别提取用户数据,将它们存储到一个数组中,并在需要时访问它们。这对性能来说应该更好,而且肯定会更简单

select * from blog b, relations r 
where b.user = $user_id or ( b.user = r.follower_id and r.following_id = $user_id )
order by posted desc;

不确定我是否反转了关注者/关注者。

这有助于我列出自己的帖子和朋友,但我也想列出是谁写的。所以我需要从users表中获取username,当我改变它时,它工作得很有魅力:where following_id={$user_id}到where follower_id={$user_id}现在它工作了,并且在phpmyadmin中显示了所有内容,但是当我尝试回显它时,只有microblog表中的数据工作。例如,如果我使用echo$mblog->username;在foreach循环中,它不起作用,我在…….中得到:Undefined属性:mBlog::$username。。。。。。。但它应该在那里?@Tobias:哦,是的,我是说在那里…:你是说$mblog->title可以工作,但是$mblog->username失败了吗?你能在那里发布你正在使用的代码吗?我正在使用两个类,一个用于用户,一个用于微博,所以我相信我需要以某种方式将用户名传递到我的微博类中。我试着用“无oop”的方式回应它,然后它像一个符咒一样工作。嗯。。。这取决于类的结构。我不知道你是怎么构造你的物体的。。。但有一个想法可能是:忽略初始查询中的用户表,在mBlog类中有一个bloguser成员,该成员返回新用户$this->user\u id。然后您可以调用$mBlog->bloguser->username。请注意,这会导致选择N+1方案,这可能会对您的性能产生重大的负面影响。出于这个原因,我通常在可能的情况下选择非面向对象方法来解决此类问题。