Ver Mensaje Individual
  #3 (permalink)  
Antiguo 03/03/2015, 09:54
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: CONCAT Ordenado

Lo resolvi con esta funcion:
Código MySQL:
Ver original
  1. DELIMITER |
  2.   DECLARE delim CHAR(1) DEFAULT ',';
  3.   DECLARE strings INT DEFAULT 0;
  4.   DECLARE forward INT DEFAULT 1;
  5.   DECLARE backward INT;
  6.   DECLARE remain TEXT;
  7.   DECLARE swap1 TEXT;
  8.   DECLARE swap2 TEXT;
  9.   SET remain = inString;
  10.   SET backward = LOCATE(delim, remain);
  11.   WHILE backward != 0 DO
  12.     SET strings = strings + 1;
  13.     SET backward = LOCATE(delim, remain);
  14.     SET remain = SUBSTRING(remain, backward+1);
  15.   END WHILE;
  16.   IF strings < 2 THEN RETURN inString; END IF;
  17.     SET backward = strings;
  18.     REPEAT
  19.       SET swap1 = SUBSTRING_INDEX(SUBSTRING_INDEX(inString,delim,backward-1),delim,-1);
  20.       SET swap2 = SUBSTRING_INDEX(SUBSTRING_INDEX(inString,delim,backward),delim,-1);
  21.       IF  swap1 > swap2 THEN
  22.         SET inString = TRIM(BOTH delim FROM CONCAT_WS(delim
  23.         ,SUBSTRING_INDEX(inString,delim,backward-2)
  24.         ,swap2,swap1
  25.         ,SUBSTRING_INDEX(inString,delim,(backward-strings))));
  26.       END IF;
  27.       SET backward = backward - 1;
  28.     UNTIL backward < 2 END REPEAT;
  29.     SET forward = forward +1;
  30.   UNTIL forward + 1 > strings
  31. RETURN inString;
  32. END |
  33. DELIMITER;

Se la usa asi:
Código MySQL:
Ver original
  1. SELECT SORT(CONCAT_WS(',', 5, 1, 6)) ordenada; -- 1,5,6
  2. SELECT SORT(CONCAT_WS(',', campo1, campo2, campo3)) ordenada FROM tabla1;
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios