数据库中省区市组装成json_全国各省、市、县、镇、村的mysql数据库和JSON格式数据...

------------------

直接开门见山了,放出下载地址先:

phpmyadmin压缩导出的mysql库,库名:ajing,内有6个表,一个表不带后缀的是原始数据,每一行是一个村,从省至村;另外5个带后缀的表是相关联的,关联id为各自的行政编码,例如湖北省id为420(其实是42,数据库中省份编码均是3位数字,最后一个0是多余的),宜昌市id为4205(然后用8个0补齐就是420500000000),当阳市(我的家乡,县级市)为420582(然后用6个0补齐就是420582000000),以此类推。

大小: 17164601 字节(16.3M)

修改时间: 2014年7月16日, 13:02:02

MD5: A170D11E82A2532CE29574C46739B9CA

SHA1: 6D0FE378E2D6AB007E5F5977B4039E9E28DE5431

CRC32: 2AABF023

这个是phpmyadmin导出的sql文件,与第一个文件是一致的,然后使用360压缩软件压缩7z格式,原始sql文件170几兆太大了。

大小: 10363487 字节(9.88M)

修改时间: 2014年7月16日, 13:09:03

MD5: 2A3916A6617F7507FADB98E34341F59E

SHA1: 517F07DC7221BAE0DA5857BB77941E50388B4CE0

CRC32: C4FF8237

这个文件是第一个文件中提到的mysql库中的不带后缀的表。

大小: 6206567 字节(5.91M)

修改时间: 2014年7月15日, 23:08:57

MD5: EC7F7F500E7888FB36639FD76A598337

SHA1: E0EE991F7B2AE8B1EA96DDBF49BADF7B6434B853

CRC32: 75D1A75A

这个文件是读取网页后产生的json格式的数据文件,分市(city)、县(county)、镇(town)以及村(village)分别保存的json后缀的文本文件,文本格式为json。每个省下的市县镇村均已该省代码明明,例如湖北省下的市为./positionJson/city/420.json、县为./positionJson/county/420.json、镇为./positionJson/town/420.json、村为./positionJson/village/420.json,以此类推。

这个json文件主要是为了各位自己去读取并按照自己的格式要求插入数据库的。

大小: 5384282 字节(5.13M)

修改时间: 2014年7月16日, 13:12:22

MD5: D862A925839F1358984607A63E79C701

SHA1: E47DD7C7BC2A815E15664D7529C7DC2268B8CB36

CRC32: EDB0B0AC

====

还记得两年前,那个时候对PHP还不甚了解,就是找本文所分享的东西,网上找到的数据要么非常老旧,要么不全;然后每个群里到处发消息找人要,当时的想法很简单,就是群里一定有做电商的程序猿,找他们拿一个全国省、市、县的统计数据相当的简单,结果等了一天没任何反应;要么是人家觉得太简单不理咱这个菜鸟,要么是大家各忙各的,压根就没时间去理会一条渺小的消息。

这个事情给我的触动非常大,网络上知识虽多,却也不乏错误、不全乃至老旧的问题,或一篇文章你抄我我抄你的这种情况;需求者往往要花费较多的时间去搜索、甄别;最可恶的是常常会看到一篇有错误或并不完善的文章被转来转去,搜索的关键词翻了几十页还能看到的情况......

嗯,貌似跑题了,还是回入正题。本文分享的省、市、县、镇、村的数据源为:https://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2013/index.html 这个网址就不介绍了,这个数据源是目前最新、最全乃至最权威的数据源。

该数据源是html格式的,需要先爬html页面,然后按关联关系读出里面的数据,刚开始写的程序是边爬页面边读出数据,没考虑到需要读取的总html文件数高达4万多个,程序运行了12个小时候才发现有些数据爬漏了(数据源服务器偶尔犯浑返回404错误,而程序里没处理这种情况),发现这个问题后就改变了策略,先down下这个数据源里的所有页面数据,然后读本地的html数据生成json文件,down完后再写程序边读边检查,确保该数据源里的所有html页面均成功down到本地。down到本地并检查完整性,这个过程持续了16个小时,索性程序自动化进行,就是时间太长了点-------4万多个html页面,纵使一个html花费1秒,也需要4万多秒(十几个小时),还算正常,加之完整性检查16个小时还算可以吧!

(下载的所有html文件夹属性示意图)

接下来就是正则匹配各个页面(并处理各个页面的关联关系成mysql字段),产生了上述第四个文件夹中的所有json文件,然后读这些json文件插入到mysql中,最终产生了完整的省、市、县、镇、村的库,供其他应用调用。这个过程,产生json比较耗时,一个省(省、直辖市并列处理)平均需要30分钟,31一个省(以及直辖市)花了大半天;然后读json插入数据库,这个比较快,每1000条一个插入,2个多小时就搞定。

(读取json插入mysql时本地虚拟机内的centos资源情况)

有人问:“为什么不直接读html并处理后直接插入msyql,还要产生json后再读了插入?”其实这是为了其他程序猿调用方便而已,我这里的json实际上也可以被认为是一种数据存储的方式而已。

看本文第二种图,本地虚拟机内的小512M内存的centos内存已被吃光,swap也快耗尽。

### 回答1: MySQL省区三级联动是指在数据库,建立三个表格来分别存储、省和区的信息,并通过外键实现它们之间的关联。这种设计可以用于它们之间的数据查询和管理。 在这种设计,首先创建一个“省份”表格,包含“省份ID”和“省份名称”两个字段。然后创建一个“城”表格,包含“城ID”、“城名称”和“省份ID”三个字段,其“省份ID”字段对应“省份”表格的“省份ID”字段,用于关联两个表格。最后创建一个“区”表格,包含“区ID”、“区名称”和“城ID”三个字段,其“城ID”字段对应“城”表格的“城ID”字段,用于关联两个表格。 当需要查询某个的所有省份时,可以直接通过“城”表格的“省份ID”字段来连接“省份”表格,通过使用JOIN语句来实现查询。同理,当需要查询某个区的所属和省份时,可以通过“区”表格的“城ID”字段来连接“城”表格和“省份”表格。 此外,在进行数据插入和更新时,可以通过在相关表格插入或更新相应的数据来实现三级联动的更新。 通过建立这种省区三级联动的数据库设计和设置,可以方便地进行、省和区的信息管理和查询。比如,在用户注册填写地址时,可以通过选择、省和区的下拉菜单,将用户选择的三级联动数据保存到数据库,从而提供方便而准确的地区信息。 ### 回答2: MySQL是一种关系型数据库管理系统,可以使用其提供的功能轻松实现省区三级联动。 首先,我们需要设计数据库表结构。可以创建三张表来分别表示、省和区。每个表都包含对应的ID和名称字段,其表还应包含省ID字段,省表还应包含区ID字段。通过使用外键约束,我们可以确保数据的一致性和完整性。 接下来,我们需要通过MySQL的语句来实现联动功能。首先,我们可以通过查询获取省表的所有记录,然后在网页省份的下拉列表。当用户选择某个省份时,我们可以通过相应的省ID查询该省份对应的所有级记录,并在网页动态生的下拉列表。最后,当用户选择某个城时,我们可以根据ID查询区表该城对应的所有区级记录,并在网页区的下拉列表。 为了实现联动功能,我们还可以借助JavaScript来监听用户的选择动作,当用户选择省份时,通过Ajax请求获取该省份对应的城数据,然后根据返回的数据动态生下拉列表。同样地,当用户选择城时,再次通过Ajax请求获取该城对应的区数据并生区下拉列表。 总结来说,要实现MySQL省区三级联动,我们需要考虑数据库表结构设计、MySQL查询语句和前端JavaScript的配合使用。通过这些方法,我们可以轻松实现、省、区的三级联动功能。 ### 回答3: MySQL省区三级联动指的是根据用户在页面上选择的省、、区/信息,向MySQL数据库查询并返回对应的结果。 首先,需要在MySQL数据库创建相关的表格来存储省、、区/的信息。可以创建三张表,分别存储省、、区/的名称、ID、所属关系等信息。 在页面上的省、、区/选择框,首先加载省的信息,当用户选择了某个省时,通过前端页面的Ajax异步请求,将选择的省ID发送给后端服务器。 后端服务器端接受到省ID后,根据该ID在MySQL数据库查询对应的城信息,并返回给前端页面。 前端页面接收到城信息后,将城信息加载到选择框。当用户选择了某个时,将选择的ID发送给后端服务器。 后端服务器端接受到ID后,根据该ID在MySQL数据库查询对应的区/信息,并返回给前端页面。 前端页面接收到区/信息后,将区/信息加载到区/选择框,完三级联动的过程。 通过MySQL省区三级联动,可以方便用户快速选择所需要的具体位置信息,提高用户体验。同时,在后端服务器端和MySQL数据库的查询操作,需要进行相应的优化,以提高系统的响应速度,保证联动操作的流畅性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值