日常开发中,我们会碰到一对一 一对多 多对多的情况,这里我们就单独把一对多拿出来研究下,一般来说一对多可以用一张表记录一对多的关系,但是有时候直观展示还有表结构的时候会有点复杂,这时我们就会用另一种方案,用一个字段 然后用逗号把一对多的关系存到主表上,这样就相当于我们把关系表并入到主表里了,这时候我们就能开开心心的在主表里就能看到从表的关系了
有利也有弊,如果我们用了逗号拆分关系表,这时候如果想只查某一个关系的时候就麻烦了
由于无法区分 我们只能用like %% 来查询 这样效率低且不准确,这时候我们就可以用find_in_set函数了 手册上是这么解释的:
字符串str 在由N 子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。
简单来说他会将用逗号分开的字段拆分成一个个独立的字段然后与要查询的字段进行匹配,如果匹配到了就相当于查到了
// daodao是要查询的字段的值,list是用逗号拆分的字段存入的值
select id, list, name from table where find_in_set('daodao',list);
经测试 用find_in_set 比like要快十分之1左右 且更精准