• MYSQL获取同时关注了某两个(或者N个)用户的用户


    使用redis的set类型数据的话会比较容易,但是业务场景就是在mysql里面,因此也需要思考解决方法

    表结构:

    CREATE TABLE `table_name` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `userid` int(12) NOT NULL COMMENT '用户ID',
    `fans_id` int(12) unsigned NOT NULL COMMENT '粉丝id',
    PRIMARY KEY (`id`),
    KEY `fans_id` (`fans_id`) USING BTREE,
    KEY `userid` (`userid`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=312141 DEFAULT CHARSET=utf8 ;

    1、比较直接的办法是直接联表:

    SELECT * FROM 
    (SELECT * FROM `table_name` WHERE userid=1060) t1 
    INNER JOIN
     (SELECT * FROM `table_name` WHERE userid=106088) t2
    ON t1.fans_id=t2.fans_id

    或者

    SELECT * FROM `table_name` t1 INNER JOIN `table_name` t2 ON t1.fans_id=t2.fans_id WHERE t1.userid=1060 AND t2.userid=106088

    2、然而,如果这里的N>2,那就意味着要联N-1次,这样显然不太合理。所以还想了一种办法:

    SELECT * FROM 
    (SELECT fans_id,COUNT(id) as user_num FROM `table_name` WHERE userid IN (1060,106088) GROUP BY fans_id) t1 
    WHERE user_num=2

    如果有N个,那么user_num=N,IN里面也是N个用户ID

    这样做还有个好处:如果要获取只关注了其中1个或者2个用户的用户,那么只要修改user_num就可以了

  • 相关阅读:
    标准JSF的生命周期
    JSON
    Applet
    关于AJAX
    Java EE第十一周
    Java EE第八周
    Java EE第七周
    Java EE第六周
    Java EE第五周
    Java EE第四周
  • 原文地址:https://www.cnblogs.com/liaokaichang/p/9210020.html
Copyright © 2020-2023  润新知