系统中有这样一个表table_ids,parrent_ids保存的是一串用逗号隔开的id
需求:以orleid为依据,拼接id、parent_ids,同时要求去除重复的id。
思路:先拼接id、parent_ids为一个字符串(暂且叫idstr),去除最后一个逗号,然后以roleid为依据,把idstr按逗号分割成多行,去重,再把多行拼接为一列。
其中tmp_numindex表为只有一个字段id,类型为int,保存从1到10000的连续数字。
SELECT roleid,GROUP_CONCAT(str) FROM ( SELECT DISTINCT roleid, REPLACE( SUBSTRING_INDEX(str, ',', a.id), CONCAT( SUBSTRING_INDEX(str, ',', a.id - 1), ',' ), '' )AS str FROM tmp_numindex a CROSS JOIN( SELECT roleid, CONCAT(str, ',')AS str, LENGTH(str)- LENGTH(REPLACE(str, ',', ''))+ 1 AS size FROMtable_ids )b ON a.id <= b.size ) a GROUP BY roleid