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

时间:2009-06-26 04:01:54

标签: php mysql join

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

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

数据库:

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

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

关系 follower_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

这很容易。 BUT。

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

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

希望你理解我的意思。

/托拜厄斯

瑞典

3 个答案:

答案 0 :(得分:0)

试试这个?

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

答案 1 :(得分:0)

怎么样?

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

答案 2 :(得分:0)

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

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;

不确定我是否改变了跟随者/跟随者。