2014.5.5数据库设计:一对多关系的表的设计和查询技巧

来源:互联网 发布:国家干部网络培训 编辑:程序博客网 时间:2024/05/22 17:07

数据库设计:一对多关系的设计

表的设计原理

在实际开发过程中往往会出现一张表的一条数据(a表)会引用另外一张表(b表)的多条数据:

a表:


b表:

a表中cresist的类型是varchar,它冗余了b表中的多个主键ID,以一定规则存在(此处为以英文逗号间隔),b表中主键的类型是int

问题描述

我们需要查看的不只是类似“1,2”这种结果,相反,我们想看到的结果是“位置偏远,配套不齐”,如何才能得到这样的结果呢?

解决方式

方式一:先查询出a表所有的数据,再遍历所有数据,取出cresist字段的值,解析(以逗号分隔开来)后从关联表查询每一条数据,取出实际内容拼接(执行sql次数:>1+n*i次):


方式二(效率更高):先查询出a表所有的数据,再遍历所有数据,取出cresist字段的值,通过sql实现内容拼接,直接得到结果(执行sql次数:=1 + n*1次):


这里使用了MySQL的两个函数:GROUP_CONCAT(将满足条件的结果拼接起来,跨多条数据的拼接,不同于CONCAT:一条数据之间的拼接)和FIND_IN_SET(判断第一个参数是否在第二个参数中出现),效果如下:

(FIND_IN_SET)

(GROUP_CONCAT + FIND_IN_SET)

方式三(能否实现?):通过一条sql语句查询出结果,不再进行遍历(执行sql次数:=1次):


结论:可以使用1条sql语句联合查询结果

0 0
原创粉丝点击