美文网首页
[Mysql函数]另一种处理一对多问题的思路find_in_se

[Mysql函数]另一种处理一对多问题的思路find_in_se

作者: 紫石南 | 来源:发表于2017-08-11 15:38 被阅读82次

场景

当一对多关系中,“多”的个数很少时可用这种思路,比如分类、标签、权限归属等常用场景。

处理方法

在“一”的表中给个String类型的集合字段,存入“多”的id,并用“,”分隔。正向查询(比如某个物品带有哪些标签)根据该字段拆分后索引“多”的那个表即可,要进行反向查询(比如带有某个标签的物品)时只用筛选该字段即可,而最好的筛选的方法就是用find_in_set函数。

函数sql样例

直接使用find_in_set函数即可:

SELECT * FROM `tablename` WHERE FIND_IN_SET('targetId',targets_column);

其他思路

另外有个思路是用like来筛选,但是要注意id包含关系,比如(12,23)直接用(like %2%)肯定是能得到错误的结果的。解决思路有两种:

  1. targets_column中规范存储,前后都有分隔符,比如(,12,13,),筛选时用(like %,2,%)可避免得到错误结果。
  2. 将“多”表id规范,比如预估标签不会超过100个,id就从100、101、102开始,这样用like也不会有问题。

总结

find_in_set是mysql的函数,如果业务数据库确定不会变,最好还是用这个函数处理,如果可能会迁移到oracle等其他数据库,还是用like比较好(虽然oracle也可以处理兼容这个函数,但是毕竟多个工作量)。
最后,切记在“多”的量不大时才采用这种方法,如果量大了还是用中间表处理更合适。

相关文章

  • [Mysql函数]另一种处理一对多问题的思路find_in_se

    场景 当一对多关系中,“多”的个数很少时可用这种思路,比如分类、标签、权限归属等常用场景。 处理方法 在“一”的表...

  • SQL优化 | MySQL问题处理案例分享三则

    分享几则MySQL问题处理案例,聊聊我的思路。处理问题的思路和角度各有不同,希望这篇文章可以抛砖引玉。 问题一、 ...

  • MySQL 一对多查询

    导语 这次要实现的是一对多查询,使用 MySQL 的 group_concat 函数实现。 group_conca...

  • 02MySQL的多表操作

    MySQL的多表操作 1 多表关系 MySQL多表之间的关系可以概括为:一对一、一对多/多对一关系,多对多 1.1...

  • 观察者模式

    处理一对多或者触发器时用到的设计模式 一般思路(面向过程) 问题定制不同的公告板显示内容时(第三方)需在dataC...

  • 必知必会-第十一章

    使用数据处理函数 本章记录常用的mysql函数。 函数 与大多数编程语言一样,sql也支持函数来处理数据。就像上一...

  • 巧用 TypeScript (一)

    以下问题来自于与公司小伙伴以及网友的讨论,整理成章,希望提供另一种思路(避免踩坑)解决问题。 函数重载 TypeS...

  • MySQL常用函数汇总学习

    前言 MySQL函数是MySQL数据库提供的内置函数,这些内置函数可以更方便处理表中的数据。下面简单介绍一下MyS...

  • 设计模式-行为模式-观察者模式

    观察者模式也叫订阅-发布模式,显然适合处理一对多的消息发布问题。 以下代码定义了观察者抽象类,纯虚函数为Recei...

  • MySQL函数基础——字符串函数详解

    昨天,咱们对MySQL的数学函数进行了讲解,今天,咱们再来解析MySQL字符串函数。 字符串函数主要用来处理数据库...

网友评论

      本文标题:[Mysql函数]另一种处理一对多问题的思路find_in_se

      本文链接:https://www.haomeiwen.com/subject/raolrxtx.html