Mysql:基于Array的多对多查询

时间:2014-01-01 19:29:48

标签: php mysql

我有一个包含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,保留用户保存文章的信息。

数据库设计是否合乎逻辑? 在我看来,查询“流”以查看您关注的用户保存的文章是非常多余的。

有人可以告诉我数据库设计是否正常并帮助我查询以获取文章 您关注的用户包括用户信息?

我试过,直到我的裤子脱落,搜索整个堆栈溢出!

3 个答案:

答案 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;