2015-12-02 30 views
0

我一直在为此工作了几个小时,现在越来越累。我想像Twitter那样从我关注的人和我自己那里获得用户发布的帖子。Mysql - 如何从你关注的用户获取新闻源

因此,有一个表users_posts,其中所有用户的帖子都列user_id来确定谁发了帖子。

另一个表users_followers包含所有追随者即。 user_id如下following_id

因此,这里是我的查询:

用户ID = 2271个

SELECT users_followers.following_id AS following_id, users_posts.id 
FROM users_followers, users_posts 
WHERE users_posts.user_id = users_followers.following_id 
AND (users_followers.user_id =2271) 

这个查询工作,但问题是,它有点慢。有没有更快的方法来做到这一点?

另外,正如你所看到的,我只能从我关注的人那里得到帖子,而不是我自己。

任何帮助?

+1

查询看起来不错;不需要括号。也许搜索查询优化和索引 –

回答

0

如果我正确理解你的表格,我会用明确的JOIN来做到这一点。我不确定这会加速多少,而不是你正在使用的隐含的JOIN

SELECT following_id, p.id 
FROM users_followers f 
LEFT JOIN users_posts p 
    ON (p.user_id = f.following_id) 
WHERE f.user_id = 2271 

很可能,向表中添加一个或两个索引将有所帮助。

使用MySQL EXPLAIN命令(只是把它放在你的SELECT查询前面)将显示被用于查询索引,临时表和其他资源。当一个查询比另一个查询更快或更有效时,它应该给你一个想法。

+0

感谢您的回复。这两个查询需要相同的时间,但我错过了索引... – Overcomer

0

如果您正确编制了表格的索引,您的查询就像书面表达一样正常。至少你需要一个关于users_posts.user_id和users_followers.following_id的索引。

查询也可能被大量记录放慢,即使它已完全索引。在这种情况下,我发现phpmyadmin是一个非常宝贵的工具。从服务器页面(可能是本地主机)选择状态标签,查看有关您的MySQL服务器如何执行的丰富信息以及如何改进它的建议。

+0

谢谢。我错过了索引... – Overcomer

相关问题