2013-10-24 5 views
2

enter image description hereКак удалить дубликаты запятую значения в одном столбце в MySQL

SELECT id, country FROM my_records 

Я получил выше результат запроса MySQL и я хочу, чтобы удалить дубликаты ID из результата. Не с помощью PHP-кода, а с запросом MySQL. Есть ли какая-либо функция или запрос, чтобы сделать то же самое.

Благодаря

+0

Страна - это колонка справа? И НЕ результат GROUP_CONCAT? – AgRizzo

+0

yes Страна - это столбец и его не из GROUP_CONCAT –

+0

Можете ли вы предоставить запрос? Может быть, это может помочь нам понять. –

ответ

5

Я застрял в аналогичной ситуации, и обнаружили, что MySql не предоставляет предопределенную функцию, чтобы преодолеть эту проблему.

Чтобы преодолеть это, я создал UDF, пожалуйста, посмотрите ниже о защите и использовании. Использование

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 

Примера:

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 

Надеются, что это поможет!

+1

Это не работает, если есть только одно значение без каких-либо запятых – pee2pee

+0

@ pee2pee Я исправил проблему. –

Смежные вопросы