问题,程序中批量查找并更新数据,除了循环还有什么更好的方式吗
批量提交数据结构如下
{
"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 。除了循环处理以外,更好的做法该如何处理。谢谢大佬们~
个人觉得还是需要循环,但是可以省略下,检测数据是否存在的步骤,期待其他大神们的回复