我有一个包含4个表的数据库:
users following
------------- --------------------------------
| id | etc.. | | user_id (FK) | follow_id (FK) |
articles article_relations
------------- --------------------------------
| id | etc.. | | user_id(FK) | article_id (FK) |
用户可以关注其他用户,以便他们可以查看他们保存的文章。 因此,根据当前用户ID,它需要检查他/她在“跟随”表中跟随的用户。现在将知道所关注的用户。
根据这些关注者ID,它需要在article_relations中检查哪些文章ID在article_relations中链接到关注者。现在它应该由哪些用户保存哪些文章。
所以现在在表格文章中需要查询article_ids,保留用户保存文章的信息。
数据库设计是否合乎逻辑? 在我看来,查询“流”以查看您关注的用户保存的文章是非常多余的。
有人可以告诉我数据库设计是否正常并帮助我查询以获取文章 您关注的用户包括用户信息?
我试过,直到我的裤子脱落,搜索整个堆栈溢出!
答案 0 :(得分:0)
结构看起来很好。至于查询,试试这个。 将下表(a)加入article_relations表(b) 通过follow_id然后通过article_id将其连接到文章表(c),所有这些都基于当前用户ID。
我将虚构的字段article_name和article_field包含在您可能从文章表中提取的示例中。
select c.id,
c.article_name,
c.article_field
from (following a
join article_relations b on a.follow_id = b.user_id)
join articles c on b.article_id = c.id
where a.user_id = current_user_id;
答案 1 :(得分:0)
尝试此查询,它会获取用户的信息,以及当前用户关注的信息以及当前用户所关注的人员保存的文章。
SELECT u.*,
fu.*,
a.*
FROM following f
INNER JOIN users u ON u.id = f.user_id
INNER JOIN users fu ON fu.id = f.follow_id
INNER JOIN article_relations ar ON ar.user_id = f.follow_id
INNER JOIN articles a ON a.id = ar.article_id
WHERE f.user_id = <currentUserId>
只需将.*
更改为每个表格所需的字段。
答案 2 :(得分:0)
只需将用户表(d)添加到其中即可。
select c.id,
c.article_name,
c.article_field,
d.id
from ((following a
join article_relations b on a.follow_id = b.user_id)
join articles c on b.article_id = c.id)
join users d on a.user_id = d.id
where a.user_id = current_user_id;