我有一个问题,我无法弄清楚自己。我尝试过使用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。
我宁愿以某种方式加入表格,因为我还想在我的循环中列出我的朋友博客。但我不仅希望显示帖子,我还想要一些关于发布该帖子的用户的信息,那么我也必须从用户表中获取一些信息。这就是困扰我的事!我无法理解。
简而言之:我想在自己的循环中列出自己的博客帖子和我所有的朋友。我还想在帖子旁边显示用户名和电子邮件。
希望你理解我的意思。
/托拜厄斯
瑞典
答案 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;
不确定我是否改变了跟随者/跟随者。