账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    在程序中批量查找并更新数据如何设计比较好
    46
    0
    问题,程序中批量查找并更新数据,除了循环还有什么更好的方式吗
    批量提交数据结构如下
    {
        "data": [
            {
                "gsm_address_id": 1,
                "province_name": "浙江省",
                "city_name": "杭州市",
                "exp_area_name": "余杭区",
                "detail_address": "某某大街",
                "post_code": "1232",
                "phone": "13212345123",
                "consignee": "联系人"
            },
            {
                "gsm_address_id": 1,
                "province_name": "浙江省",
                "city_name": "杭州市",
                "exp_area_name": "余杭区",
                "detail_address": "某某大街",
                "post_code": "1232",
                "phone": "13212345123",
                "consignee": "联系人"
            }
            ...
        ]
    }
    
    数据库结构如下
    // 用户表
    CREATE TABLE `users` (
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '姓名',
      `phone` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '手机号'
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
    
    // 地址表
    CREATE TABLE `addresss` (
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      `user_id` int(11) DEFAULT NULL COMMENT '用户 id',
      `gsm_address_id` varchar(20) DEFAULT NULL COMMENT 'gsm 地址 id',
      `province_name` varchar(20) DEFAULT NULL COMMENT '省',
      `city_name` varchar(20) DEFAULT NULL COMMENT '市',
      `exp_area_name` varchar(30) DEFAULT NULL COMMENT '区',
      `detail_address` varchar(50) DEFAULT NULL COMMENT '详细地址',
      `post_code` varchar(10) DEFAULT NULL COMMENT '邮编',
      `tel` varchar(20) DEFAULT NULL COMMENT '联系方式',
      `phone` varchar(20) DEFAULT NULL COMMENT '手机号',
      `consignee` varchar(20) DEFAULT NULL COMMENT '联系人名称',
      `is_default` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否默认 1 是 0 不是',
      `status` tinyint(4) DEFAULT NULL COMMENT '状态 1 正常 2 禁用',
      PRIMARY KEY (`id`),
      KEY `user_id` (`user_id`) USING BTREE,
      KEY `gsm_user_number` (`gsm_user_id`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=501 DEFAULT CHARSET=utf8;

    接受到传递的 json 数据。第一步:根据 gsm_address_id 查找地址表中是否存在该数据,存在则更新,不存在则新增。第二步:根据手机号查找用户表数据。存在这个用户则地址表中 user_id 该用户的 id,不存在则默认为 0 。除了循环处理以外,更好的做法该如何处理。谢谢大佬们~

    2
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 苦撐 普通会员 1楼
      502 Bad Gateway

      502 Bad Gateway


      nginx
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部