1. 好友关系

传统:uid、 friendId

缺陷:对于海量数据,100w用户,每人50个好友,则有 100w * 50的数据,数据量颇大

改进1:分表

根据uid hash成多个数据表,这样保障一个递增关系

缺陷:处理共同好友、相识度问题无从下手

改进2:聚集

uid、friendIds(23,45,89,…)

问题1:申请好友

方法1:增加数据表记录申请关系 uid, requestFriendIds(3,56,5655)

方法2:好友表增加字段 requestFriendIds(3,56,5655)

问题2:共同好友

(1) friendid IN (我的所有好友) //跟我的好友集合是好友

(2) uid != ‘我’ //这个uid不是我

(3) //跟我不是好友

(4) //按照uid分组,并且共同好友大于1

新设计sql写成:

先查出我、我的好友

select a.uid, count(a.uid) as NUM

FROM table a

WHERE a.friendIds

and a.uid <> ‘我’

and uid not in (我的好友)

GROUP BY a.uid HAVING COUNT(uid) >= 1

ORDER BY NUM DESC

这个时候问题出来了,在做共同好友的时候,显然需要知道这个好友的交叉,

比如 a的好友是(1,2,3) b的好友是(3,4,5)

那么共同好友有一个是3,现在需要知道这个共同好友个数,即求(1,2,3)和(3,4,5)的交集个数

没办法,只能在mysql中自定义function

如下:

(1), 比如(1,2,3,4) get_split_str(str1, 3); 指的是 3,即分个获得字符串

原理:1,2,3,4 比如找到3 先找到 1,2,3 然后翻转变成3,2,1 然后找到第一个字串就是3

get_split_str(str, f_order)

begin

declare delimiter char;

declare rs char;

set delimiter = ',';

set rs = reverse(substring_index(reverse(substring_index(str,delimiter,f_order)),delimiter,1));

return rs;

end

(2) 分割后的字串个数

原理:1,2,3,4 字符串长度 – (替换分隔符的字符串长度) + 1

get_split_num(str)

begin

declare delimiter char;

set delimiter=',';

return 1+(length(str) - length(replace(str,delimiter,'')));

end

(3) 两个字符串集合的交集个数,比如(1,2,3) (3,4,5) 结果是1

get_intersect_num(str1, str2)

begin

declare num int;

declare i int ;

declare val char;

declare intersect_num int default 0;

set num=get_split_num(str1);

set i=1;

while i<=num do

set val = get_split_str(str1, i);

if FIND_IN_SET(val, str2) then

set intersect_num = intersect_num+1;

end if;

set i=i+1;

end while;

return intersect_num;

end

这些在navicate写的,所以没有加标签和参数

最后的sql是

首先求出 我的好友记录

$uid=''; //我自己

$row = $db->getRow("select * from friend where uid = '$uid' ");

$friensStr = '';

$sql = "select uid, get_intersect_num('{$row['friendids']}', friendids) as NUM

FROM table

WHERE NUM > 0

and a.uid <> '$uid'

and uid not in ($friensStr)

ORDER BY NUM DESC";

mysql有3个共同好友_共同好友mysql相关推荐

  1. sae mysql 同步本地_MYSQL入门之三_将本地MySQL数据导入SAE数据库_MySQL

    bitsCN.com MYSQL入门之三_将本地MySQL数据导入SAE数据库 1. MySQL字符集 MySQL的默认字符集是latin1,将本地MySQL库导出成sql,再导入到SAE的MySQL ...

  2. mysql双机热备 读写分离_轻松搭建MySQL主从复制、读写分离双机热备)

    注意:如果此步骤始终为空设置(0.00秒),则表示先前的my.cnf配置不正确,请返回并重试检查配置步骤. (从)数据库中的配置 1.修改从属库的数据库配置文件 [root @ localhost]# ...

  3. mysql数据库+易语言的应用_易语言mysql数据应用源码

    易语言mysql数据应用源码 易语言mysql数据应用源码 系统结构:注册账号,连接Mysql,用户注册验证码,修改密码验证码,忘记密码验证码,修改密码,忘记密码, ======窗口程序集1 | | ...

  4. mysql 查询用户最后登陆时间_弄懂mysql:mysql的通信协议

    我准备从mysql的实现出发,将mysql好好理解一下,从他的逻辑结构一层一层出发,感受一下,所以再学第一层之前,要先对mysql整体的逻辑结构有一个初步认识 mysql逻辑架构 整体来说,MySql ...

  5. mysql修改表结构大表_在线修改MySQL大表的表结构

    由于某个临时需求,需要给在线MySQL的某个超过千万的表增加一个字段.此表在设计之时完全按照需求实现,并没有多余的保留字段. 我们知道在MySQL中如果要执行ALTER TABLE操作,MySQL会通 ...

  6. mysql 聚合函数内比较运算符_关于常用 MYSQL 聚合函数,其他函数 ,类型转换,运算符 总结...

    /* 关于MYSQL 聚合函数,其他函数 ,类型转换,运算符 总结,*/ -- 1 运算符优先级  /* 12.1.1. 操作符优先级 以下列表显示了操作符优先级的由低到高的顺序.排列在同一行的操作符 ...

  7. 详解mysql数据库的启动与终止_详解MySQL数据库的启动与终止(一)

    由于MySQL服务器具有多种安装分发,而且能够运行在多种操作平台之上,因此它的启动与停止的方法也多种多样.你可以根据实际情况使用其中的一种.在你安装.升级或者维护系统时,你可能需要多次启动和终止服务器 ...

  8. 登录mysql时 未找到 grant命令_我在mysql数据库中可以登陆,为什么用grant命令创建用户时提示错误?...

    问题表象: 我的mysql中的 my.ini文件配置: [csharp] view plaincopyprint? #Path to installation directory. All paths ...

  9. 自动清理mysql的lock进程的脚本_自动清理MySQL的Lock进程的脚本

    自动清理MySQL的Lock进程的脚本 作者:小涵 | 来源:互联网 | 2018-07-13 21:01 阅读: 915 最近数据库服务器在某一时段进程数忽然暴增,导致数据库服务器死掉,根据日志查询 ...

最新文章

  1. 生态伙伴 | 小鹅通企学院入驻飞书,助力企业一键打造自己的企业大学
  2. 高等数学-关于第二类面积分的对称性问题
  3. Visual Studio原生开发的20条调试技巧(下)
  4. 统计决策理论2 条件分布上
  5. 使用java命令运行class文件提示“错误:找不到或无法加载主类“的问题分析
  6. 以阿里云RPA为例,来告诉你到底RPA是什么?
  7. 软链接,xcode接lua文件夹
  8. 面试经验:求职面试时的835守则
  9. 编程语言----00程序员常用网站
  10. Linux基础命令---vmstat显示虚拟内存状态
  11. 虚拟机桥接模式网络配置
  12. 华硕 ZenFone 国产新机盘点
  13. DC 逻辑综合的基本流程
  14. linux查看文件大小ls
  15. 异常收集 ----雨之殇
  16. 微软承认部分 Win10 安装 12 月更新后出现 0xc000021a 蓝屏错误
  17. 带你了解下Kafka的客户端缓冲池技术
  18. python求不规则图形面积_Python求阴影部分面积
  19. ubantu 安装显卡
  20. 非标机械设计Excel表格伺服电机选型计算公式软件机器设备自动化

热门文章

  1. JSP与Servelt的区别
  2. mysql 利用binlog增量备份,还原实例
  3. BizTalk开发系列(九) MAP的连接方法
  4. js构造函数的浅薄理解
  5. 外媒评出中国最美20个景点
  6. Zabbix 3.2.6通过SNMP和iDRAC监控DELL服务器
  7. 倒腾了一天的笔记-centos 部署jar包
  8. CSS3+JS切割轮播图
  9. 边学习新技术边工作的重要性
  10. OC-通知+Block