mysql用户关注店铺表_求助微博关注用户表的设计

本帖最后由 anydy2008 于 2013-10-11 10:43:13 编辑

查询需求如下:

1.查询关注了哪些用户。

2.查询被哪些用户关注了。

3.查询和某个用户共同的关注列表。

4.查询是否互相关注。

用一个表,以 user_id follow_user_id add_time列的形式可以实现上述功能。

可是关注量比较大,需要按用户 id来分表。不知道怎样设计表结构好。

求助友友们,请多多给建议。 谢谢

回复讨论(解决方案)

以 用户id 来分区

用户ID吧,每个表之间都用用户id

以 用户id 来分区

版主 我是想用用用户id来分表,可是分表后上面的功能就不好实现了。比如我要查 哪些用户关注了我,分表后;我不确定要查哪个表。只有将所有分表都查一次才可以知道。

单独保存一个关注表

或者把关注你的用户也存到用户表里可行不?

正因为分表后不确定要查哪个表,所以不能分表而是分区

分区后的表对你而言依然是一个整表(虽然被分成了多个文件),实际查询的是那个文件由mysql决定而不是你决定

如果你依然想自己分表,那么需要交换 user_id、follow_user_id 列的内容形成新表,再对两个表分表

以 用户id 来分区

版主 我是想用用用户id来分表,可是分表后上面的功能就不好实现了。比如我要查 哪些用户关注了我,分表后;我不确定要查哪个表。只有将所有分表都查一次才可以知道。

不要分表呀,直接写sql语句就可以了

1.查询关注了哪些用户:select `follow_user_id` from `表` where `user_id`='你的id'

2.查询被哪些用户关注了:select `user_id` from `表` where `follow_user_id`='你的id'

3.查询和某个用户共同的关注列表。select * from `表` where `user_id` in ('你的id', '某个用户id')

4.查询是否互相关注:select * from `表` where `user_id`='你的id' and `follow_user_id`='某个用户id' `user_id` in (select `follow_user_id` from `表` where `user_id`='某个用户id')

当然估计还有更优秀的写法,特别是第4条

select * from `表` where `user_id`='你的id' and `follow_user_id`='某个用户id' and `user_id` in (select `follow_user_id` from `表` where `user_id`='某个用户id')第4条少了一个and,重新写一下

正因为分表后不确定要查哪个表,所以不能分表而是分区

分区后的表对你而言依然是一个整表(虽然被分成了多个文件),实际查询的是那个文件由mysql决定而不是你决定

如果你依然想自己分表,那么需要交换 user_id、follow_user_id 列的内容形成新表,再对两个表分表

谢谢回答 我会参考一下的

正因为分表后不确定要查哪个表,所以不能分表而是分区

分区后的表对你而言依然是一个整表(虽然被分成了多个文件),实际查询的是那个文件由mysql决定而不是你决定

如果你依然想自己分表,那么需要交换 user_id、follow_user_id 列的内容形成新表,再对两个表分表

版主 分区是什么概念呢。吾只懂电脑分区阿

还有这句话可以详细说一下吗

”那么需要交换 user_id、follow_user_id 列的内容形成新表,再对两个表分表“

谢谢啦!

关于表分区可参见 http://www.baidu.com/s?ie=utf-8&bs=mysql%E5%88%86%E5%8C%BA%E8%A1%A8&f=8&rsv_bp=1&wd=mysql%E5%88%86%E5%8C%BA&rsv_sug3=1&rsv_sug=1&rsv_sug1=1&rsv_sug4=26&inputT=796

关注可以是单向的,比如这个user_id follow_user_id1 21 31 4

按 user_id 分表后,你整检查所有的表才能得到与 follow_user_id 相连的 user_id

所以你需要另有一组以 follow_user_id 分组的表

follow_user_id user_id 2 13 14 1

关于表分区可参见 http://www.baidu.com/s?ie=utf-8&bs=mysql%E5%88%86%E5%8C%BA%E8%A1%A8&f=8&rsv_bp=1&wd=mysql%E5%88%86%E5%8C%BA&rsv_sug3=1&rsv_sug=1&rsv_sug1=1&rsv_sug4=26&inputT=796

关注可以是单向的,比如这个user_id follow_user_id1 21 31 4

按 user_id 分表后,你整检查所有的表才能得到与 follow_user_id 相连的 user_id

所以你需要另有一组以 follow_user_id 分组的表

follow_user_id user_id 2 13 14 1

版主

"follow_user_id 分组的表" 也是要分表的吧

那这个方案可以支持查,哪些人关注了我吗。

比如我的用户id是1 按follow_user_id 尾数进行分表。

follow_user_tbl_1

follow_user_id user_id

1 1

11 1

21 1

follow_user_tbl_2

follow_user_id user_id

2 1

12 1

22 1

如果 user_id follow_user_id 表示 user_id 被 follow_user_id 关注

那么 follow_user_id user_id 表示 follow_user_id 关注了 user_id

你把主体确定了,事情就清楚了

单独保存一个关注表

或者把关注你的用户也存到用户表里可行不?

单独保存一个关注表不大可行 因为数据量太大啦

关注我的用户存到用户表不合理

如果 user_id follow_user_id 表示 user_id 被 follow_user_id 关注

那么 follow_user_id user_id 表示 follow_user_id 关注了 user_id

你把主体确定了,事情就清楚了

版主 吾听了你的,开始明白你的想法啦。 谢谢了。要分表可能只有这样啦

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值