表字段:
CATG_ID, PAR_ID, CATG_NM,CATG_CD
CATG_ID | PAR_ID | CATG_NM | CATG_CD |
1000 | 电视/影音 | TV/VIO | |
1010 | 1000 | 电视 | TV |
1011 | 1010 | 4K超高清电视 | 4K-TV |
如何实现查询1011的id,cd和nm是包含父类的平级结构呢?
例如:{"ids":"1011,1010,1000","cds":"TV/VIO,TV,4K-TV","nms":"电视/影音,电视,4K超高清电视"}
查询某一分类的父层级信息,SQL如下:
SELECT
@Pn := CATG_ID,
CATG_CD,
@pathId :=(
SELECT
GROUP_CONCAT(
SUBSTRING_INDEX(
@Pn := (
SELECT
CONCAT( PAR_ID, '|', CATG_ID )
FROM
tbl_pms_category
WHERE
CATG_ID = SUBSTRING_INDEX( @Pn, '|', 1 )),
'|',
- 1
)
ORDER BY
CATG_ID DESC SEPARATOR ','
)
FROM
tbl_pms_category
WHERE
@Pn IS NOT NULL
ORDER BY
CATG_ID ASC
) AS PATH_IDS,
@Pn1 := CATG_ID,
@pathId :=(
SELECT
GROUP_CONCAT(
SUBSTRING_INDEX(
@Pn1 := (
SELECT
CONCAT( PAR_ID, '|', CATG_CD )
FROM
tbl_pms_category
WHERE
CATG_ID = SUBSTRING_INDEX( @Pn1, '|', 1 )),
'|',
- 1
)
ORDER BY
CATG_ID DESC SEPARATOR ','
)
FROM
tbl_pms_category
WHERE
@Pn1 IS NOT NULL
ORDER BY
CATG_ID ASC
) AS PATH_CDS,
@Pn2 := CATG_ID,
@pathId :=(
SELECT
GROUP_CONCAT(
SUBSTRING_INDEX(
@Pn2 := (
SELECT
CONCAT( PAR_ID, '|', CATG_NM )
FROM
tbl_pms_category
WHERE
CATG_ID = SUBSTRING_INDEX( @Pn2, '|', 1 )),
'|',
- 1
)
ORDER BY
CATG_ID DESC SEPARATOR ','
)
FROM
tbl_pms_category
WHERE
@Pn2 IS NOT NULL
ORDER BY
CATG_ID ASC
) AS PATH_NMS
FROM
tbl_pms_category;
过滤条件可根据实际需要自行添加;另外,SEPARATOR 后使用的分割符也可自行修改为“/”或其他。