常见场景草稿
user (id,name,role_id)
role (id,name)
- 查找role列表每个role_id在user的个数
SELECT *,(SELECT count(*) from user where user.role_id = role.id) as num from role
- 提供
user.id
列表(1,2,3)和role_id
6 ,判断user.id
列表的role_id
是否都是6
SELECT count(*) as sum FROM user where id in (1,2,3) and role_id=6
sum!=list.length,说明存在其他
role_id
的user,或者user记录本身不存在,输出false。否则输出true
- 根据查询结果批量插入
无需用VALUES
INSERT INTO form_channel(form_no,channel_no) (select form_no,channel_no from form_list)
- 表单、渠道、应用记录、应用服务信息
## 创建表单
form_list
:记录表单详情信息form_no,state,company_id
form_channel
: 记录表单绑定了哪些渠道form_no,channel_no
form_game_list
: 记录表单中所有应用的详情信息game_no,form_no,state
# 审核中
form_game_list
:state=>'审核中'game_list
:valid:-1,1,0 分别表示未开通/正服务/已挂起;game_no
主键;- 不存在
package_name,company_id
记录,则此时插入valid=-1,channel_no为null,game_ref_ing_no
字段指向form_game_list
表中的审核中记录的game_no
- 存在
package_name,company_id
记录,更新game_ref_ing_no
字段,此时该应用所属渠道还是之前审核通过的 form_channel
:修改表单的渠道配置操作
# 审核通过
form_game_list
:state=>'审核通过'game_list
: 删除package_name,company_id
的记录,插入对应渠道列表的记录,并设置game_ref_ed_no
# 暂不支持
form_game_list
:state=>'暂不支持'game_list
: 不做操作
判断状态是审核还是升级就看是否存在game_ref_ed_no
,增加state字段设置,方便查询
# 关闭、开启服务
game_list
: 设置多个渠道的记录其valid=0/1
=》正服务、已挂起
# 修改服务的渠道配置
game_list
: 只有该服务拥有game_ref_ed_no
值,才可以修改。删除之前记录,新增对应渠道记录
# 查看版本记录
package_name,company_id
去form_game_list
中取
# 修改服务信息
ref_ed指向的一定是审核通过的
初次提交->审核中 一条无channelNo,无ref_ed,有ref_ing的记录
暂不支持->审核失败 之前记录无ref_ed,已存在ref_ing,处于未开通状态
审核通过->审核通过 之前记录无ref_ed,将原记录删除 并按渠道新增多条
再次提交->升级中 多条原记录,有ref_ed,设置ref_ing
暂不支持->审核失败 之前记录有ref_ed,将原记录删除 并按渠道新增多条
审核通过->审核通过 之前记录有ref_ed,将原记录删除 并按渠道新增多条
# 5. 判断字段是否为空 用 is NULL
而不是 =NULL
- 按role_id分组,多列合为一个字段,以&分割,每个元素包括id#name
SELECT GROUP_CONCAT(CONCAT_WS('#',id,name) SEPARATOR '&') from user GROUP BY role_id
- 联表删除,删除role表和user表中id=1的记录
DELETE ROLE,USER from ROLE,USER where user.role_id=role.id and role.id=1
这是全连接的方式,如果role表存在数据,user表不存在数据,删除就会失败。
采用左连接的方式,
DELETE ROLE,USER from ROLE LEFT JOIN USER ON user.role_id=role.id where and role.id=1
- NOT IN 和 is NULL 一起用
字段a的某条记录为NULL,而 a NOT IN (1,2,3) 不能得到该记录,应该是 a NOT IN (1,2,3) OR a is NULL