PHP / MySQL活动(ala facebook)
作者:互联网
这可能是一个毛茸茸的问题但是.说我有
Followers:
-user_id
-follower_id
Activities:
-id
-user_id
-activity_type
-node_id
拉动用户活动相当容易.但是,追随者活动的最佳方式是什么?一个子选择?随着用户越来越多的关注者,它似乎非常缓慢.有什么想法来加快这个速度吗?
此外,在更概念的层面上.分组如何工作.这一切都是用一个查询完成的吗?或者是所有活动数据都被提取,然后在PHP端进行排序和分组?
用户X,Y和Z执行活动A.
用户J做了活动B中的3个
解决方法:
子选择通常比JOIN慢,但它实际上取决于你用它们做了什么.为了回答你的主要问题,我会通过JOIN得到关注者数据:
SELECT * FROM followers f
LEFT JOIN activities a ON f.follower_id=a.user_id
WHERE f.user_id=$followedPerson
这假设跟随者表表示具有user_id的用户,并且正在跟随他们的用户也跟随用户表中的user_id的follower_id.
只要你有关于followers.user_id的索引,它就不会非常慢.但是,此类查询可能返回的数据量可能会大于您真正想要处理的数据量.您需要确定应用程序要显示的活动类型,并尝试相应地对其进行过滤,以便您不会一直进行大量查询,而只使用返回结果的一小部分.
将数据拉出并将其分组PHP端是可以的,但是如果你可以避免首先选择它,那你就更好了.在这种情况下,我可能会添加一个ORDER BY f.follower_id,activity_date DESC,假设存在一个日期,并尝试为活动表提出一些更多的过滤条件.然后我将遍历PHP中的行,输出由关注者分组的数据.
标签:php,mysql,social-networking 来源: https://codeday.me/bug/20190827/1743004.html