首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL IN alternative

MYSQL IN alternative
EN

Stack Overflow用户
提问于 2014-01-22 01:30:18
回答 2查看 64关注 0票数 0

我正在编写一个社交网络类型的网站,用户有朋友,我试图创建一个新闻馈送与他们的朋友所做的行动

我有三张桌子

用户

代码语言:javascript
复制
id     |    username
---------------------
1      |    john
2      |    nicole
3      |    bob

朋友

代码语言:javascript
复制
id     |    uid    |    who
----------------------------
1      |     1     |     2
2      |     2     |     1
3      |     2     |     3
4      |     3     |     2
5      |     3     |     1
6      |     1     |     3

行为

代码语言:javascript
复制
id    |    owner    |  to_id  |    message 
-------------------------------------------
1     |     3       |    2    |     'hello'
2     |     3       |    1    |     'yoooo'

因为'john‘是'bob’的朋友,'john‘应该能够看到'bob’对'nicole‘的动作

编辑::如果'nicole‘向'bob’发送一个动作,我也想从另一个方向获取动作。

我目前的解决方案是:

有一个包含用户所有好友的字符串:$friends = '1,2,3,4....etc‘

查询:

代码语言:javascript
复制
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

上面的查询是有效的,但我的问题是,当用户开始有数百个朋友时,这个查询会慢得可怕,我能做些什么来防止这种情况?

EN

回答 2

Stack Overflow用户

发布于 2014-01-22 01:34:58

它非常适合您当前的需求。

票数 1
EN

Stack Overflow用户

发布于 2014-01-22 01:39:17

使用JOIN来实现这一点怎么样?

代码语言:javascript
复制
SELECT actions.* 
FROM actions a 
JOIN friends f ON f.who = a.owner 
WHERE f.uid = (current user's ID)
LIMIT 15

(返回当前用户的好友拥有的15个操作。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21265133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档