SQL连接。高效查询

时间:2017-03-22 15:48:38

标签: mysql database join

DB Tables

上表所需要的是:

1.对应于id的所有用户详细信息。

2.他做过的帖子数量。

3.他拥有的关注者数量和他关注的人数(followid = user1.user2 [User1 is followin user2]。

4.假设user1正在访问user2个人资料,我需要找出是否存在与user1和user2相对应的followid,即follow_detail中的user1.user2。

我通过使用单独的查询(当然在mysql中)连接表(post_detail和user_detail)和3来实现1和2。 我想知道我是否可以在一个SQL查询中获得所有这些。这是由配置文件API返回的,因此使用多个查询命中DB应该不是很好。 如果数据库设计不够好,无法在一个查询中获取所有上述数据,那么我可以更改它。

1 个答案:

答案 0 :(得分:1)

通过使用子查询,您可以将结果合并到单个查询中。这是否比多个简单查询更有效 - 我不太确定。你需要测试它。

select ud.*,
       (select count(*)
        from post_detail where post_detail.user_id=ud.user_id) as post_count,
       (select count(*)
        from follow_detail where follow_detail.following=ud.user_id) as follower_count,
       (select count(*)
        from follow_detail where follow_detail.follow=ud.user.id and follow_detail.following=...) as follower_user 
from user_detail ud
where ud.user_id=...

您需要提供用户ID代替...。我对最后一个子查询做了很多猜测,因为你不清楚你想在那里看到什么。