系统编码表中存的有编码的数值和编码的名称 , 但是一般存的时候通常存名称 . 但是在给前端显示的时候需要对应值对应的名称.
/**
* 系统编码
* @TableName t_sys_code
*/
@TableName(value ="t_sys_code")
@Data
public class SysCode implements Serializable {
/**
* 编码ID
*/
@TableId(value = "code_id",type = IdType.ASSIGN_UUID)
private String codeId;
/**
* 编码类别
*/
@TableField(value = "code_type")
private String codeType;
/**
* 编码数值
*/
@TableField(value = "code_number")
private String codeNumber;
/**
* 名称
*/
@TableField(value = "code_name")
private String codeName;
//......
}
编码的值的列表
数据库中存的格式是 1,3,4,13 需要给前端展示的是 1月,3月,4月,每天
sql如下:
select t.jczq,
(
SELECT GROUP_CONCAT(d.code_name ORDER BY FIND_IN_SET(d.code_number, t.jczq) SEPARATOR ',')
FROM t_sys_code d
WHERE
d.code_type = 'month'
AND FIND_IN_SET(d.code_number, t.jczq) > 0
) AS jczqName,
t.jcpl,
(select d.code_name from t_sys_code d where d.code_type = '102' and d.code_number = t.jcpl) AS jcplName -- 如果不是拼接的直接查就行
from t_aqjcjl t
查询结果如下
关键代码解释
FIND_IN_SET(d.code_number, t.jcpl):判断 code_number 是否存在于逗号分隔的 jcpl 中,并返回其位置。
ORDER BY FIND_IN_SET(…):确保拼接顺序与原字段一致。
GROUP_CONCAT将匹配的 code_name 按原顺序拼接成逗号分隔字符串。