我正在编写一个社交网络类型的网站,用户有 friend ,我正在尝试使用他们的 friend 所做的操作创建新闻提要
我有三张 table
用户
id | username
---------------------
1 | john
2 | nicole
3 | bob
friend
id | uid | who
----------------------------
1 | 1 | 2
2 | 2 | 1
3 | 2 | 3
4 | 3 | 2
5 | 3 | 1
6 | 1 | 3
行动
id | owner | to_id | message
-------------------------------------------
1 | 3 | 2 | 'hello'
2 | 3 | 1 | 'yoooo'
由于“john”是“bob”的 friend ,“john”应该能够看到“bob”对“nicole”的操作
编辑::如果“nicole”向“bob”发送操作,我还想从另一个方向获取操作
我当前的解决方案是:
有一个包含用户所有 friend 的字符串:$friends = '1,2,3,4....etc'
查询:
SELECT
`Actions`.*
FROM
`Actions`
WHERE
(`Actions`.`to_id` IN (${friends}) OR `Actions`.`from_id` IN (${friends}))
AND
( `Actions`.`to_id` != (${logged_id} AND `Actions`.`from_id` != (${logged_id})
ORDER BY
`Actions`.`time` ASC
LIMIT
15
上面的查询有效,但我的问题是,当用户开始有数百个 friend 时,此查询将非常慢,我可以采取什么替代方法来防止这种情况发生?
最佳答案
如果您想尝试不同的更好的解决方案,请尝试使用任何流行的图形数据库。它非常适合您当前的要求。
关于MYSQL IN 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21265133/