官方数据库
官方数据库为草料提供独立的云数据库,同步你后台的数据。可以使用数据分析软件连接这个云数据库,制作数据报表;或写程序主动调用数据,对接其他系统。
- 官方数据库为只读数据库,不可编辑
- 数据库类型为Mysql 5.7
- 会实时同步所有的码信息、表单记录、状态明细、计划完成明细等数据。
- 只创建批量模板和表单,没有填写数据,是不会创建数据表的。
示例
类型:MySQL5.7
主机:rm-bp1m4fy8d66u3c6xmbo.mysql.rds.aliyuncs.com
端口:3306
数据库名:cli_202112111(示例)
用户名:cli_202112111(示例)
密码:eiadk289djlgj(示例)
数据报表示例
如果你需要连接官方数据库,制作自定义报表,查看报表示例
由于涉及了基础的数据库(SQL)操作与BI工具操作,具有一定的使用门槛,使用前请掌握基础的操作能力。查看报表制作教程
通用字段解释
说明:这些字段是一些关键信息,主要用于各表之间数据关联
字段名 | 类型 | 说明 | 示例 |
---|---|---|---|
code_id | int | 码的唯一标识 | 54349863 |
tpl_code_id | int | 批量模板的唯一标识 如果非模板生码,tpl_code_id与code_id相同 | 54349863 |
member_id | int | 成员唯一标识 | 2091263 |
auth_id | int | 填表人唯一标识 | 12789054 |
record_id | int | 表单数据唯一标识 | 16759806 |
常用模型
模型一:设备状态分析
base_codeinfo(码的基本信息表)内关联code_state(码的状态表),得到各设备的状态值与更新时间,分析状态分布。
模型二:计划完成情况
code_task_log(计划执行情况表) 左关联 base_codeinfo(码的基本信息表),得到计划完成情况并与之对应的码信息。
模型三:批量码分析
template_XXXXXX (批量码信息表)左关联 table_dXX(表单数据表)、code_state(码的状态表)。template_XXXXXX可以获取到码的可变内容信息。
模型四:串联后续表单记录
比如在故障上报的记录里,添加维修记录表单,将这两条记录串联起来得到完整的信息。添加后续动态功能介绍 使用table_dxx(故障上报表)左关联table_dxx(维修记录表单),关联条件是 记录编号和来源编号。如果还有更多后续表单,可以再左关联此表单。
各数据表字段说明
1. base_codeinfo 码的基本信息表
说明:当账号下有二维码信息时会推送该表,包含活码、模板子码
字段名 | 类型 | 说明 | 示例 |
---|---|---|---|
code_id | int | 码的唯一标识 | 67654543 |
码名称 | string | 码名称 | 消火栓01 |
码类型 | string | 有活码、模板子码和模板码 | 模板子码 |
url | string | 二维码链接 | http://qr61.cn/o2eikt/q85Q8KL |
tpl_code_id | int | 子码对应的批量模板ID 非模板子码,内容与code_id相同 | 56335353 |
模板名称 | string | 子码对应的批量模板名称 非模板子码,内容与码名称相同 | 消火栓 |
目录 | string | 码所在的最后一级目录名称,不包含前几级目录信息 | 消防设备 |
标签集 | string | 码的分组集合 | 消防类,设备 |
目录信息:为码所在的最后一级目录,不会显示其上几级目录信息。
2. code_state 码的状态表
说明:当二维码中有关联的状态时会推送该表。查看状态功能
现在不会推送在开通之前的码状态数据,如需要这部分数据,可以联系在线客服,由技术手动帮你同步。
字段名 | 类型 | 说明 | 示例 |
---|---|---|---|
code_id | int | 码的唯一标识 | 67654543 |
member_id | int | 成员唯一标识 | 2091263 |
auth_id | int | 填表人唯一标识 | 12789054 |
更新时间 | datetime | 状态更新时间 | 2020-11-20 15:00:00 |
例:设备运行状态_720 | string | 状态组名称,后面"_720"数字是为了防重复,系统自动生成的标识 | 正常 |
...... | string | 账号下的所有状态组都会列在这里 | 异常 |
3. code_state_log 码的状态的变更日志表
说明:当二维码中有关联的状态时会推送该表,每次状态变更的记录都会记录在这张表中。首次开通数据库时,不会推送在开通之前的状态变更数据。
字段名 | 类型 | 说明 | 示例 |
---|---|---|---|
code_id | int | 码的唯一标识 | 67654543 |
member_id | int | 成员唯一标识 | 2091263 |
auth_id | int | 填表人唯一标识 | 12789054 |
更新时间 | datetime | 状态更新时间 | 2020-11-20 15:00:00 |
状态组 | string | 状态组的名称 | 设备状态 |
状态值 | string | 该状态组的本次的状态 | 正常 |
变更方式 | string | 变更状态的方式,包含填表后更新状态和手动编辑状态 | 记录/编辑 |
来源 | string | 变更方式为记录时,对应表单数据的唯一标识 | 12220988 |
4. table_dXX 表单数据明细表
说明:当账号下有表单数据提交时会推送该表。表单数据表是以"table_"开头的一批表,d后面跟着的是数字,即表单的唯一编号,如:table_d45,一个表单对应一个表。查看表单功能
字段名 | 类型 | 说明 | 示例 |
---|---|---|---|
record_id | int | 表单数据唯一标识 | 12220988 |
code_id | int | 码的唯一标识 | 67654543 |
tpl_code_id | int | 模板子码:对应的批量模板ID 非模板子码:内容与code_id相同 | 54349863 |
码名称 | string | 码的名称 | 消火栓01 |
tpl_id | int | 表单的唯一标识 | 346636 |
记录单名称 | string | 表单的名称 | 消火栓检查 |
记录时间 | datetime | 添加表单数据时间 | 2020-11-20 15:20:00 |
状态 | string | 这条记录当前的状态:包含是否删除、是否审核通过 | 正常/删除/待审核/审核通过/审核不通过 |
member_id | int | 协作成员唯一标识 | 2091263 |
auth_id | int | 填表人唯一标识 | 12789054 |
记录编号 | string | 表单数据的编号 | L1234 |
处理状态 | string | 表单数据的处理状态 | 待处理/已完成/无需处理/暂不标记状态 |
创建来源 | string | 包含手机扫码填写,在备注中填写,即后续动态中填写 | 手机扫码填写/在备注中填写 |
来源编号 | string | 当创建来源为在备注中填写时,来源编号为原记录的记录编号 | L1235 |
提交编号 | string | 草料后台自定义的提交编号 | 11 |
处理状态变更时间 | datetime | 处理进度变更的时间 | 2020-11-20 15:20:00 |
例:设备名称 | string | 表单的组件名称 | 检查项1 |
...... | string | 表单的组件名称会全部展示 |
表单组件推送情况说明:
- 数字组件,推送时不会显示单位。
- 检查项组件中,不同的值代表的意思为: 0=检查项未填写;1=检查项选勾; 2=检查项选叉;3=检查项不选;当检查项"√"、"×"自定义名称后,推送时不会显示自定义的名称,仍为0、1、2、3。
- 检查项组件中备注添加的描述和图片不会推送。
- 定位组件会推送三个字段,包含定位中文信息、定位纬度、定位经度。
- 描述组件会推送,字段名称为描述组件对应的标题名称,字段值为描述组件添加的内容。
- 分组标题组件不会推送。
- 身份证组件的推送内容为拆分成多个字段展示,会拆分成身份证信息、身份证号、姓名、性别、民族、出生日期、住址,其中身份证信息展示内容为空,其他字段会填充对应的值。
5. base_table_data 表单数据汇总表
说明:当账号下有表单数据提交时会推送该表。这是一张所有表单记录的概要汇总表,上面有各表单记录中共有的字段信息,比如码名称、记录人、记录单名称等。 应用场景:比如有出入两个表单,可以通过这个表拿到所有出入数据,而不需要将出入两个数据表做聚合处理。
字段名 | 类型 | 说明 | 示例 |
---|---|---|---|
record_id | int | 表单数据唯一标识 | 12220988 |
code_id | int | 码的唯一标识 | 67654543 |
tpl_code_id | int | 模板子码:对应的批量模板ID 非模板子码:内容与code_id相同 | 56335353 |
tpl_id | int | 表单的唯一标识 | 346636 |
码名称 | string | 码名称 | 消火栓01 |
记录单名称 | string | 表单名称 | 消火栓巡检 |
记录时间 | datetime | 添加表单数据的时间 | 2020-11-20 12:01:02 |
记录人 | string | 填表人姓名 | 李四 |
member_id | int | 成员唯一标识 | 2091263 |
auth_id | int | 填表人唯一标识 | 12789054 |
状态 | string | 这条记录当前的状态:包含是否删除、是否审核通过 | 正常/删除/待审核/审核通过/审核不通过 |
记录编号 | string | 记录编号 | L1234 |
6. template_codeinfo_XXX 批量模板创建的子码信息表
说明:当账号下有批量模板生成的子码时会推送该表,该数据表主要展示批量子码的可变内容。查看批量生码功能
命名方式为 template 开头,后面是批量模板的识别编号,该编号规则有两个历史版本。
6.1 命名规则:
- 方式一:后缀为dXX,d后面的数字为批量模板编号数字。 比如后台的批量模板编号为M312,对应的数据表名为 template_codeinfo_D312
- 方式二:后缀为内部的批量模板ID。 编辑批量模板,从网址中获取ID,见下图
6.2 数据字段说明:
字段名 | 类型 | 说明 | 示例 |
---|---|---|---|
code_id | int | 码的唯一标识 | 67654543 |
tpl_code_id | int | 批量模板的唯一标识 | 56335353 |
状态 | string | 批量子码是否删除 | 正常 |
... | string | 以下字段是在批量模板中的可变内容 |
7. record_review_data 后续动态数据表
说明:当表单记录中有添加后续动态或者标记处理进度后会推送该表。查看后续动态功能
字段名 | 类型 | 说明 | 示例 |
---|---|---|---|
review_id | int | 后续动态填写记录的唯一标识 | 67654543 |
record_id | int | 后续动态填写表单记录的唯一标识 | 12220988 |
状态 | string | 后续动态记录是否删除 | 正常/删除 |
来源 | string | 后续动态记录的添加来源 | 手动填写/转发了记录/转发给了企业微信同事/变更处理状态/填写表单记录/发送通知/回复评论 |
文本内容 | string | 底部评论的具体内容/变更处理进度的记录 | 将记录更新为【已完成】/@张三/【图片】... |
关键内容 | string | 变更后的处理进度/当填写后续动态中的表单时,关键内容会显示填写对应表单的数据唯一标识 | 已完成/12220988 |
附件 | string | 后续动态提交的图片、录音、手写签名等多媒体文件 | |
填写人 | string | 填表人姓名 | 张三 |
填写时间 | datetime | 后续动态记录添加的时间 | 2020-11-20 15:20:00 |
8. base_task 计划基本信息表
说明:当账号下创建计划,并且开始执行计划后会推送该表。计划管理功能
字段名 | 类型 | 说明 | 示例 |
---|---|---|---|
task_id | int | 计划的唯一标识 | 33886 |
计划名称 | string | 计划名称 | 灭火器每月巡检 |
描述 | string | 计划描述 |
9. code_task_log 计划执行情况表
说明:当账号下创建计划,并且开始执行计划后会推送该表,开通数据库时,该表只推送当前周期及后续周期的计划数据,历史周期的计划完成情况数据不会推送。
该数据表中没有码名称信息,可以关联 base_codeinfo或template_XXX,扩充码的信息。
字段名 | 类型 | 说明 | 示例 |
---|---|---|---|
log_id | int | 当前计划任务的唯一标识 | 239168567 |
task_id | int | 计划的唯一标识 | 33886 |
计划名称 | string | 计划名称 | 灭火器每月巡检 |
code_id | int | 码的唯一标识 | 67654543 |
状态 | string | 该周期的执行状态 | 可选值: 完成/未完成/即将超期/ 超期完成/超期未完成 |
开始时间 | datetime | 计划周期开始时间 | 2020-12-10 12:00:00 |
执行时间 | datetime | 状态变更的时间 | 2020-12-10 13:00:00 |
截止时间 | datetime | 该码在本周期的结束时间 | 2020-12-10 18:00:00 |
是否过滤 | string | 根据是否设置无需检查的条件进行过滤 | 可选值:是/否 |
变更方式 | string | 变更状态的方式 | 记录 |
来源 | int | 变更方式为记录时,对应表单数据的唯一标识 | 12220988 |
来源记录结果 | string | 变更方式为记录时,对应表单数据的记录结果 | 设备正常 |
10. code_tags 码的分组表
说明:当使用分组功能并且将码加入分组时会推送该表。查看分组管理功能
字段名 | 类型 | 说明 | 示例 |
---|---|---|---|
code_id | int | 码的唯一标识 | 67654543 |
例:1号楼灭火器 | int | 分组名称,如果该码在此分组下,则值为1 | 1 |
例:2号楼灭火器 | int | 分组名称 | 1 |
...... | int | 账号下的所有分组都会列在这里 |
11. base_members 成员信息表
说明:当账号下有高级成员添加时会推送该表,当前成员信息表仅同步高级成员信息,普通成员信息不会推送。查看成员功能
字段名 | 类型 | 说明 | 示例 |
---|---|---|---|
member_id | int | 协作成员的唯一标识 | 2091263 |
姓名 | string | 协作成员姓名 | 张三 |
手机号 | string | 协作成员手机号 | 135xxxx8934 |
12. base_auth_msg 填表人信息表
说明:当有表单记录提交或者状态更新记录时,会推送填表人信息表,填表人即填写表单或者变更状态的人员。查看填表人组件
- 如果未填写表单,则只展示auth_id
- 如果填写表单但是未使用填表人组件,则只展示auth_id,姓名为微信用户XXXX
- 如果填写表单并且使用了姓名、手机号、工号、车牌号、身份证等填表人组件后则展示对应字段的数据
字段名 | 类型 | 说明 | 示例 |
---|---|---|---|
auth_id | int | 填表人的唯一标识 | 12789054 |
姓名 | string | 填表人姓名 | 李四 |
手机号 | string | 填表人手机号 | 135xxxx8934 |
工号 | string | 填表人工号 | D234 |
车牌号 | string | 填表人车牌 | 浙A.12342 |
身份证 | string | 填表人身份证 | 343xxxxxxxxxxxxx |
13. record_audit_data 记录审批工单表
说明:当提交待审批的记录或者记录被审批后会推送该表。查看审批功能
字段名 | 类型 | 说明 | 示例 |
---|---|---|---|
auth_id | int | 审批工单的唯一标识 | 9001 |
record_id | int | 审批工单关联记录的唯一标识 | 1001 |
状态 | string | 工单是否审批 | 待审核/通过/不通过 |
审核标题 | string | 多级审核设置的标题,单级审批内容为空 | 财务审核 |
指定审核人 | string | 由填表人或者前一级审核人指定的审核人,不指定时内容为空 | 张三 |
审核人 | string | 实际审核操作人 | 张三 |
审核时间 | datetime | 实际审核时间 | 2024-09-20 15:20:00 |
审核签名 | string | 实际审核人签署的签名图片地址,没有签署时内容为空 | https://ncstatic.clewm.net/rsrc/2024/1015/15/c12d5af513b275ba2465f923557a1f7c.png |
审核回复 | string | 实际审核人审批时填写的回复信息,未填写时内容为空 | 提交的内容不符合要求 |
创建时间 | datetime | 审批工单创建时间 | 2024-09-20 10:20:00 |
事件推送说明
1. 活码
事件 | 是否推送 | 影响的数据表 | 数据表现 |
---|---|---|---|
单码新建 | 推送 | base_codeinfo | base_codeinfo新增一条二维码数据 |
单码新建-有状态关联 | 推送 | base_codeinfo、code_state、code_state_log、table_d[x]、table_relation、base_table_data | 数据表新增一条数据 |
单码修改 | 推送 | base_codeinfo | base_codeinfo修改了调整的数据,会覆盖原数据 |
单码删除 | 推送 | base_codeinfo | base_codeinfo删除一条二维码数据 |
单码删除-有表单数据 | 推送 | base_codeinfo、table_d[x]、base_table_data | 数据表删除一条数据 |
单码删除-有状态关联 | 推送 | base_codeinfo、code_state、table_d[x]、code_state_log、base_table_data | 数据表删除一条数据 |
2. 批量模板
事件 | 是否推送 | 影响的数据表 | 数据表现 |
---|---|---|---|
新建批量模板 | 不推送 | - | - |
新建批量模板-有状态关联 | 推送 | code_state、code_state_log | code_state新增一条码模板的状态数据,code_state_log新增初始化状态下的码模板状态变更记录 |
修改批量模板标题 | 不推送 | - | - |
修改批量模板可变内容-无子码 | 不推送 | - | - |
修改批量模板可变内容-有子码 | 不推送 | - | - |
删除批量模板-有子码 | 推送 | base_codeinfo、template_codeinfo_[x] | 数据表删除对应的数据 |
删除批量模板-有子码/表单数据 | 推送 | base_codeinfo、template_codeinfo_[x]、base_table_data、table_d[x] | 数据表删除对应的数据 |
删除批量模板-有子码/关联状态 | 推送 | base_codeinfo、template_codeinfo_[x]、code_state、code_state_log | 数据表删除对应的数据 |
新建子码 | 推送 | base_codeinfo、template_codeinfo_[x] | 数据表新增对应的数据 |
新建子码-有状态关联 | 推送 | base_codeinfo、template_codeinfo_[x]、code_state、code_state_log | 数据表新增对应的数据 |
删除子码 | 推送 | base_codeinfo、template_codeinfo_[x] | 数据表删除对应的数据 |
删除子码-有状态关联 | 推送 | base_codeinfo、template_codeinfo_[x]、code_state、code_state_log | 数据表删除对应的数据 |
删除子码-有表单数据 | 推送 | base_codeinfo、template_codeinfo_[x]、base_table_data、table_d[x] | 数据表删除对应的数据 |
修改子码 | 推送 | base_codeinfo、template_codeinfo_[x] | 如果是修改子码名称,变更base_codeinfo对应的记录,如果是修改子码可变内容对应的值,变更template_codeinfo_[x]对应的子码记录 |
3. 表单
以下事件都为有表单数据时的情况说明,无表单数据时都不推送
事件 | 是否推送 | 影响的数据表 | 数据表现 |
---|---|---|---|
删除表单 | 推送 | table_d[x]、base_table_data | 对应的table_d[x]删除所有记录,表结构保留,base_table_data删除对应表单的记录 |
新增表单组件 | 推送 | table_d[x] | table_d[x]新增一个组件字段,值为空 |
编辑表单组件 | 推送 | table_d[x] | table_d[x]中原来的组件字段保留,值为空,并新增编辑后的组件字段 |
删除表单组件 | 推送 | table_d[x] | table_d[x]中原来的组件字段保留,值为空 |
修改表单名称 | 推送 | table_d[x]、table_relation | table_d[x]中修改表单的名称,table_relation修改对应表单的名称 |
表单数据提交 | 推送 | base_table_data、table_d[x]、table_relation、base_auth_msg | 数据表新增对应的数据 |
表单数据待审核 | 推送 | base_table_data、table_d[x]、table_relation、base_auth_msg | 数据表新增对应的数据,与单个记录添加的区别是:base_table_data、table_d[x]的字段中多一个审核状态 |
表单数据审核通过或者拒绝 | 推送 | table_d[x]、base_table_data | table_d[x]、base_table_data中审核状态字段对应的值变更 |
表单数据修改 | 推送 | table_d[x]、base_table_data | table_d[x]、base_table_data中修改指定的数据内容,覆盖原数据 |
表单数据删除 | 推送 | table_d[x]、base_table_data | table_d[x]、base_table_data中删除指定的数据内容,表结构保留 |
4. 状态
状态相关数据的同步会延迟60s
事件 | 是否推送 | 影响的数据表 | 数据表现 |
---|---|---|---|
新增状态组 | 不推送 | - | - |
修改状态组名称 | 不推送 | - | - |
修改状态项名称 | 不推送 | - | - |
新增/删除状态项 | 不推送 | - | - |
删除状态组 | 不推送 | - | - |
二维码状态变更 | 推送 | table_d[x]、table_relation、base_table_data、code_state、code_state_log、base_auth_msg | code_state 如果有对应码的数据存在,则覆盖原数据,否则新增;code_state_log 新增状态变更数据;base_auth_msg 如果存在则更新,否则新增 |
状态组修改后,二维码状态变更 | 推送 | table_d[x]、table_relation、base_table_data、code_state、code_state_log | code_state 如果有对应码的数据存在,修改前的状态组字段保留,值为空,新增修改后的状态组字段和对应的值;code_state_log 新增状态变更数据 |
状态项修改后,二维码状态变更 | 推送 | table_d[x]、table_relation、base_table_data、code_state、code_state_log、base_auth_msg | code_state 更新对应状态项字段的值code_state_log 新增状态变更数据 |
5. 计划管理
计划新增/修改后需要开始执行才会推送数据
事件 | 是否推送 | 影响的数据表 | 数据表现 |
---|---|---|---|
计划新增 | 不推送 | - | - |
计划开始 | 推送 | base_task、code_task_log | 数据表新增对应的数据 |
计划超时 | 推送 | code_task_log | code_task_log 状态字段的值变更,执行时间字段自动填充状态变更时的时间 |
计划删除 | 推送 | base_task、code_task_log | 数据表删除对应的数据 |
计划修改 | 推送 | base_task、code_task_log | 如果计划名称修改,base_task对应的数据更新,覆盖原数据;修改后的计划执行时,code_task_log对应的数据会更新,并覆盖原数据 |
6. 后续动态
事件 | 是否推送 | 影响的数据表 | 数据表现 |
---|---|---|---|
后续动态功能开启 | 不推送 | - | - |
后续动态功能关闭 | 不推送 | - | - |
后续动态填写 | 推送 | record_review_data | record_review_data新增对应记录的数据 |
后续动态【表单】填写 | 推送 | record_review_data、base_table_data、table_d[x]、table_relation、base_auth_msg | record_review_data新增对应记录的数据,同时再走一遍表单数据提交的逻辑,其中table_d[x]数据中的来源编号字段为被关联表单记录的记录编号 |
后续动态填写后的记录删除 | 推送 | record_review_data | record_review_data对应的数据保留,状态字段变更为删除 |
标记处理进度 | 推送 | record_review_data | record_review_data新增对应数据 |
7. 目录
事件 | 是否推送 | 影响的数据表 | 数据表现 |
---|---|---|---|
目录重命名 | 不推送 | - | - |
二维码移动目录 | 推送 | base_codeinfo | base_codeinfo 更新目录字段的值 |
目录删除 | 推送 | base_codeinfo、template_codeinfo_[x]、table_d[x]、base_table_data、code_state_log、code_state、code_task_log | 根据目录下的码删除所有的表数据,表字段保留,值为空 |
8. 成员
事件 | 是否推送 | 影响的数据表 | 数据表现 |
---|---|---|---|
添加普通成员 | 不推送 | - | - |
添加高级成员 | 推送 | base_members | base_members新增对应的成员数据 |
高级成员姓名修改 | 推送 | base_members | base_members修改对应的成员数据 |
删除高级成员 | 不推送 | - | - |
常见问题
1. 二维码名称变更后,为什么表单数据表中的二维码没有更新
现在表单中的二维码名称是不更新的,如果你需要取出最新的二维码名称,可以左关联一下 base_codeinfo 这张表,关联的字段为 code_id。
2. 表单中的组件名称修改后,数据表中有两个组件,分别是修改前和修改后的。
这是正常的,修改组件后,会保留原组件字段。
3. 计划中已设置了过滤掉异常状态值码,但在数据表中还存。
数据表中会有所有的计划任务数据,是通过 【是否过滤】这个字段来判识该条计划是否有过滤。(另外,在状态变更后在下个周期过滤才生效)
4. 为什么开通后,连接数据库,推送的数据不全
首次开通后,需要将历史数据所有推送过来,大概需要1-3小时,跟账号的数据量有关。如隔一天了,还是推送不全,可以联系在线客服排查问题。
5. 为什么我修改表单字段后,数据库中的字段没有更新
修改表单后不会触发数据库更新,只有当有新增或修改表单数据时,才会触发更新该数据表。所以只需提交一条新记录可以了。
6. Power BI如何链接我们的数据库
我们的数据库为Mysql,连接时数据库类型选择为Mysql,查看操作详情
7. 图片组件中多个图片地址是拼在一起的,如何可以获取到单张图片地址。
图片组件的数据格式为 urls_1,urls_2,...。并且图片的链接数量是不定的。 *提供你一套函数来获取单张图片的地址,这里的 照片_233233换成你自己的数据字段名称。
urls_1: SUBSTRING_INDEX(`照片_233233`, ',', 1)
urls_2: if( LENGTH(`照片_233233`) - LENGTH(REPLACE(`照片_233233`, ',', '')) >= 1, SUBSTRING_INDEX(SUBSTRING_INDEX(`照片_233233`, ',', 2), ',', -1) ,'')
urls_3: if( LENGTH(`照片_233233`) - LENGTH(REPLACE(`照片_233233`, ',', '')) >= 2, SUBSTRING_INDEX(SUBSTRING_INDEX(`照片_233233`, ',', 3), ',', -1) ,'')
urls_3: if( LENGTH(`照片_233233`) - LENGTH(REPLACE(`照片_233233`, ',', '')) >= 3, SUBSTRING_INDEX(SUBSTRING_INDEX(`照片_233233`, ',', 4), ',', -1) ,'')
后面依次类推。