- 论坛徽章:
- 0
|
本帖最后由 cenalulu 于 2013-03-18 10:02 编辑
--
-- 表的结构 `user_friends`
--
CREATE TABLE IF NOT EXISTS `user_friends` (
`seq` int(10) unsigned NOT NULL auto_increment COMMENT '自增序号',
`uid` int(10) unsigned NOT NULL COMMENT '用户UID',
`frienduid` int(10) unsigned NOT NULL COMMENT '好友UID',
`type` tinyint(3) unsigned NOT NULL default '0' COMMENT '关系类型',
`createtime` int(10) unsigned NOT NULL default '0' COMMENT '创建时间',
`disabled` tinyint(3) unsigned NOT NULL default '0' COMMENT '是否启用',
PRIMARY KEY (`seq`),
UNIQUE KEY `uid` (`uid`,`frienduid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户好友关系' AUTO_INCREMENT=4 ;
--
-- 转存表中的数据 `user_friendship`
--
INSERT INTO `user_friends` (`seq`, `uid`, `frienduid`, `type`, `createtime`, `disabled`) VALUES
(1, 10000000, 10000001, 0, 0, 0),
(2, 10000001, 10000000, 0, 0, 0),
(3, 10000000, 10000002, 0, 0, 0);
===============
双向关注:
SELECT `A`.`frienduid` as uid FROM (`user_friends` A) LEFT JOIN `user_friends` B ON `A`.`frienduid`=`B`.`uid` WHERE `A`.`uid` = 10000001 AND `B`.`frienduid` = 10000000 LIMIT 10
单向关注(这里有疑问):
SELECT `frienduid` as uid FROM (`user_friends`) WHERE `uid` = 10000000 LIMIT 10
这个单向关注查询,会把包括双向关注的也查询出来,现在想把已经双向关注的给排除掉,
请问一下怎么用一条语句,实现这样的需求。
另外,这样的关系数据,估计也就100w这样吧,left join 查询压力应该不大吧?
还有像这样的关系,大家建议存一条,通过 type 类型的标准方向关系,还是存两条单向关系好一点?
谢谢~~ |
|