小程序开发的时候有一个需求,需要客户填写物品可出售地区(可多选),然后把选中的地区存放到数据库中。
目前这个地区的作用有两个,1,在列表上给其他用户查看,2.作为搜索条件被其他客户搜索。
现在有两种思路:
一.选中的省市区父子级code全部传到数据库
用户选择某个省份之后,把与之相关的所有市,区县全部存到数据库中,比如说江苏省的code是:32,存放数据的格式是:{
province:32,
city:3201,3202,3203, //(十三个地级市)
county:320101,320102,320103 //....(江苏省共有95个区县)
}
二.子级全选传父级code,子级本身变成0(0代表全选)
比如说选中江苏省,山东青岛,存放数据的格式是:{
province:32,33,
city:0,3301,
county:0,0
}
第一种问题数据量过大,存储两个省份之后,数据总大小会在5kb左右。
第二种是我目前的想法,但是不太确定会有什么问题。
我在网上只查到如何做级联选择的,而没有讲到数据该如何存储的问题,有大佬帮忙解答一下吗?

一种思路:只存选中的数据,
比如选中是省,那么存储就是,32,
比如选中的是市,那么存储的就是,3202,
比如选中的是区,那么存储的就是,320102,
由于多选:可能有些省份是全省,有些是某个省中的一个市,或者一个区
,32,3302,340102,35,3601,3602,
const address = [{
addressCode: "32_3201_320101,33_3303_0,34_3401_340101,34_3405_0"
},
{
addressCode: "32_3201_320101,32_3202_0,33_0_0,33_0_0"
},
{
addressCode: "35_3501_320101,35_3502_0,33_0_0,33_0_0"
}
]
// code=> 32_0_0
export function selectAddress(code) {
const list = code.split('_');
const [
p,
city,
county
] = list;
const _selected = [];
address.forEach(value => {
// 判断是否选中
let _isSelected = false;
const _addr = value.addressCode.split(',');
_addr.forEach(child => {
// split 把字符串变成数组
const _childName = child.split('_');
// indexOf 在数组中查找是否有符合条件的值
const _isP = _childName[0] == p||p=='0'||_childName[0]==0;
const _isCity = _childName[1] ==city||city=='0'||_childName[1]==0;
const _isCounty = _childName[2] == county||county=='0'||_childName[2]==0;
if (_isP &&_isCity& _isCounty ) {
_isSelected = true;
console.log("退出循环-暂留");
// 退出循环
// throw Error();
// break;
}
});
if(_isSelected)
_selected.push(value);
});
// _selected就是选中的数组
console.log("_selected:");
console.log(_selected);
}
这个是我自己写的前端的方法,但是不知道适不适合后端。