又要拿地区表来当例子,其实这张表很典型,不同的表结构设计反映着不同的数据关系,4个字段可以反映4层关系,如果用省市区这样结构去设计,那么需要设计6个字段,且计算省数量市数量时候还需要distinct或者group by去重
关于数据结构,就python而言用的较多的是列表和字典,实际生活中我们想把数据展现的更有逻辑一些,通过代码实现类似的功能,锻炼逻辑思考能力和编程语言的使用能力,通过不同的数据结构组合去展现数据,是一件很有意思的事情.
这张表通过id关联出父子关系,根据level字段判定级别,那么如何将这张表显示为省-市-区县的结构呢? 还是用到了group_concat函数,以及2次left join进行表的自连接,只是链接条件是id和parent
一.SQL脚本处理
上面的结果集已经可以把省市区划分出来,如果我们想展示成下面的格式(最终json格式以双引号)
mysql5.7版本虽然增加了对json数据的处理函数,写起来还是有点困难,这时候尝试用python去处理.
二.python处理
选择用python处理的话,是有两种逻辑的,一个是执行上面的复杂sql,一个是直接读取表,所有操作都是python写
2.1第一种处理方式:
第一个是去执行上面的复杂SQL脚本赋值给一个变量,通过对记录集进行遍历,因为上图需要处理成一个列表的数据结构,列表里面是每个省的字典,每个省下面citys这个key又对应一个市列表,市列表里面又是每个市-区的字典.....
O(∩_∩)O哈哈~还是很绕的
总体思路就是 先获得省id和省名称去重之后的数据,可以用list和set组合形式得到省的列表province_items,province_items列表里面是每个省的字典province_item = {'province_id':省id,'province':省名称,'citys':[]},key值citys对应是一个空列表.
对结果集rows和进行遍历时候 将每一条记录row变量的第一个字段的值(id的值)是否和province_item字典的['province_id']值是否相等 决定 province_item['citys']这个空列表是否append({'city_name':city_item['city_name'],'areas':city_item['areas'])
json数据
2.2第二种处理方式:
第二种处理方式是直接读取源表数据,不执行复杂sql,所有处理的数据结构逻辑用python代码完成
领取专属 10元无门槛券
私享最新 技术干货