【问题标题】:Get results from my own and "friends" posts从我自己和“朋友”的帖子中获取结果
【发布时间】:2009-06-26 04:01:54
【问题描述】:

我有一个我自己搞不清楚的问题。我尝试过使用 LEFT JOIN 等,但似乎没有任何效果。我正在使用 MySQL,所以你知道。

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

数据库:

用户: ID, 用户名, 密码, 等等

博客: ID, 标题, 文本, 用户身份, 等等

关系 追随者ID, following_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

这是最简单的部分。但是。

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

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

希望你明白我的意思。

/托比亚斯

瑞典

【问题讨论】:

    标签: php mysql join


    【解决方案1】:

    怎么样?

    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}
                        );
    

    【讨论】:

    • 当我更改时,这就像一个魅力: where following_id = {$user_id} 到 where follower_id = {$user_id} 现在它正在工作并在 phpmyadmin 中显示所有内容但是当我尝试回显它时只有“微博”表中的数据有效。例如,如果我使用 echo $mblog->username;在 foreach 循环中它不起作用,我得到: Undefined property: mBlog::$username in....... 但它应该在那里?
    • @Tobias:哎呀,是的,我的意思是那里的追随者...... :) 你是说 $mblog->title 有效但 $mblog->username 失败了吗?您可以在那里发布您正在使用的代码吗?
    • 我正在使用2个类,一个用于用户,一个用于微博,所以我相信我需要以某种方式将用户名传递给我的微博类。我试着用 no oop 的方式呼应它,然后它就像一个魅力。
    • 嗯...这取决于您的课程结构。我不知道你是如何构造你的对象的......但一个想法可能是:在你的初始查询中忽略用户表,并在你的 mBlog 类中有一个 bloguser 成员,它返回“new User($this->user_id )”。然后你可以调用 $mblog->bloguser->username 代替。
    • (请注意,这确实会导致“SELECT N+1”场景,这可能会对您的性能产​​生重大负面影响。因此,对于此类问题,我通常选择非 OOP 方法在可能的情况下。
    【解决方案2】:

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

    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;
    

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

    【讨论】:

      【解决方案3】:

      试试这个?

      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
      

      【讨论】:

      • 这有助于我列出我自己的帖子和我的朋友,但我也想列出谁写的。所以我还需要从用户表中获取用户名
      猜你喜欢
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多