我已经在这个问题上工作了好几个小时了,而且累了。我希望用户和我自己的用户发帖,就像推特一样。
所以有一个表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)
此查询有效,但问题是,它有点慢。有更快的方法吗?
此外,正如您所看到的,我只能从我关注的人那里获得帖子,而不是我自己。
任何帮助?
答案 0 :(得分: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
查询前面)将显示用于查询的索引,临时表和其他资源。当一个查询比另一个查询更快或更有效时,它应该让您知道。
答案 1 :(得分:0)
如果您已正确索引表格,那么您的查询就可以了。您至少需要在users_posts.user_id和users_followers.following_id上建立索引。
即使完全编制索引,也可以通过大量记录来减慢查询速度。在这种情况下,我发现phpmyadmin是一个非常宝贵的工具。从服务器页面(可能是localhost)中选择Status选项卡,以查看有关mysql服务器执行情况的大量信息以及如何改进它的建议。