मैं इसी तरह की स्थिति में फंस गया और पाया कि MySQL इस समस्या को दूर करने के लिए कोई पूर्वनिर्धारित कार्य प्रदान नहीं करता है।
दूर करने के लिए मैंने एक यूडीएफ बनाया है, कृपया परिभाषा और उपयोग पर नीचे एक नज़र डालें।
DROP FUNCTION IF EXISTS `get_unique_items`;
DELIMITER //
CREATE FUNCTION `get_unique_items`(str varchar(1000)) RETURNS varchar(1000) CHARSET utf8
BEGIN
SET @String = str;
SET @Occurrences = LENGTH(@String) - LENGTH(REPLACE(@String, ',', ''));
SET @ret='';
myloop: WHILE (@Occurrences > 0)
DO
SET @myValue = SUBSTRING_INDEX(@String, ',', 1);
IF (TRIM(@myValue) != '') THEN
IF((LENGTH(@ret) - LENGTH(REPLACE(@ret, @myValue, '')))=0) THEN
SELECT CONCAT(@ret,@myValue,',') INTO @ret;
END if;
END IF;
SET @Occurrences = LENGTH(@String) - LENGTH(REPLACE(@String, ',', ''));
IF (@occurrences = 0) THEN
LEAVE myloop;
END IF;
SET @String = SUBSTRING(@String,LENGTH(SUBSTRING_INDEX(@String, ',', 1))+2);
END WHILE;
SET @ret=concat(substring(@ret,1,length(@ret)-1), '');
return @ret;
END //
DELIMITER ;
नमूना उपयोग:
SELECT get_unique_items('2,2,2,22,2,3,3,3,34,34,,54,5,45,,65,6,5,,67,6,,34,34,2,3,23,2,32,,3,2,,323') AS 'Items';
परिणाम:
2,22,3,34,54,45,65,67,23,32,323
आशा है कि यह मदद!