mysql中一对多关联,获取多表中最新一条数据

背景

因为项目中销售人员对于学生要采取跟进操作,现在想要知道所有学生的最后一次跟进记录以及时间,
解决方案有很多。先把表结构贴出来。更多交流欢迎,join(“q_qun”,1071834648)
学生表
在这里插入图片描述
跟进表
在这里插入图片描述

解决方案

1.先查出学生表中所有学生,然后遍历去查询(php中foreach中查询),简单,但是效率很低。
2. 先排序然后在调用子查询在已经排序好的里面取,麻烦,效率也不高。
3.使用GROUP_CONCAT配合SUBSTRING_INDEX

介绍下这两个函数

  1. GROUP_CONCAT
    很多人都知道他是分组合并,但是可能对于他第二个排序参数应用不太多。列出详细的使用
    group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )
    这里就是先根据时间排序,把所有时间从大到小拼接起来,用指定分割符隔开,默认为逗号隔开,如果你要合并的字符串中你确定了不会有特殊字符,你就可以指定某个特殊字符隔开。
  2. SUBSTRING_INDEX
    按关键字截取字符串,用法如下:
    substring_index(被截取字段,关键字,关键字出现的次数),可能对于第三个参数不太清楚,这里详细说一下用count代表第三个参数:
    返回一个 str 的子字符串,在 delimiter 出现 count 次的位置截取。
    如果 count > 0,从则左边数起,且返回位置前的子串;
    如果 count < 0,从则右边数起,且返回位置后的子串
    举例: 如果字符串为 aaaaa,bbbbbb,cccccc 如果count=1,那么返回的值为aaaaa,相当于分割后的第一个元素,如果为2,就是aaaaa,bbbbbb。同理就可以参照php中的substr中-1索引就可以理解count<0的情况了。
  3. 实现思路
    先分组拼接,把大的放在第一个,然后用指定字符串分割,取第一个,特别注意分割的字符串一定是保证不会出现在需要分组拼接的字符串中,否则会导致数据不准确。

最终效果
在这里插入图片描述
查询这个跟进的详情
在这里插入图片描述
附上mysql代码:

SELECT
	s.id,student_name,
  @a:=SUBSTRING_INDEX(GROUP_CONCAT(f.create_time ORDER BY f.create_time DESC),",",1) as follow_content,
  SUBSTRING_INDEX(GROUP_CONCAT(f.remark ORDER BY f.create_time DESC),",",1) follow_content
FROM
	rms_student_sell s,
	rms_student_sell_follow f
WHERE
	f.student_sell_id = s.id
  and f.student_sell_id=5348
GROUP BY
f.student_sell_id
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲不住的程序员

您的打赏将是我最大的鼓励感谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值