我编码一个社交型网站,用户有朋友和我试图创建一个动作一个新闻源,他们的朋友都做不成MYSQL在替代
我有三个表
用户
id | username
---------------------
1 | john
2 | nicole
3 | bob
朋友
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'
自“约翰”是朋友“鲍勃,‘约翰’应该能看到‘鲍勃’行动‘妮可’
编辑::我也想从另一个方向的动作如果“妮可”发送至“鲍勃”
我目前的解决方案的作用是:
有一个包含用户的所有朋友的字符串:$朋友=“1,2,3,4 .. ..等'
查询:
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
上述查询的工作原理,但我的问题是,当用户开始有数百个朋友这个查询将会非常慢,我可以做什么作为替代防止这种情况?
是否在朋友表中的id列起任何作用? – Strawberry
它的服务器没有目的,你会建议删除它吗? – user3023421
你的另一个选择是,加入表格并进行查询,但如果我没有错,“IN”状态比加入表 – semirturgay