收藏
回答

请问一下有关于多选省市区存储数据的问题,数据该以什么形式保存到数据库?

小程序开发的时候有一个需求,需要客户填写物品可出售地区(可多选),然后把选中的地区存放到数据库中。

目前这个地区的作用有两个,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左右。

第二种是我目前的想法,但是不太确定会有什么问题。


我在网上只查到如何做级联选择的,而没有讲到数据该如何存储的问题,有大佬帮忙解答一下吗?


最后一次编辑于  2022-08-17
回答关注问题邀请回答
收藏

2 个回答

  • peng
    peng
    2022-08-17

    一种思路:只存选中的数据,

    比如选中是省,那么存储就是,32,

    比如选中的是市,那么存储的就是,3202,

    比如选中的是区,那么存储的就是,320102,


    由于多选:可能有些省份是全省,有些是某个省中的一个市,或者一个区

    ,32,3302,340102,35,3601,3602,


    2022-08-17
    有用 1
    回复 2
    • 常安康
      常安康
      2022-08-18
      这样的话数据库查询就有一点问题了,比如说我想查询江苏省连云港市海州区可购买的货物,但是出货商的货物出售地选择了江苏省(也就是说可以在江苏省任意地区出售),这样的话后端查询逻辑就会变得非常复杂。
      2022-08-18
      回复
    • peng
      peng
      2022-08-18回复常安康
      indexOf(',32')!=-1  这样看能不能解决你的疑问。
      2022-08-18
      回复
  • 常安康
    常安康
    2022-08-18

    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);


    }

    这个是我自己写的前端的方法,但是不知道适不适合后端。

    2022-08-18
    有用
    回复
登录 后发表内容