Ver Mensaje Individual
  #4 (permalink)  
Antiguo 02/03/2010, 14:37
Bloodsucker
 
Fecha de Ingreso: abril-2009
Mensajes: 13
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: En un procedure: seleccionar un "elemento" (usando algun tipo de loop) de

¡Hola!

He encontrado justo lo que necesitaba!!! Casualmente mirando la docu de mysql he encontrado un comentario de una persona fantástica con una sugerencia de código de justo lo que yo necesitoooooo !!!!!

Aquí el código para que quien quiera pueda usarlo:

Código MySQL:
Ver original
  1. select substring_index(substring_index('a,b,c', ',',@r:=@r+1),',',-1) zxz
  2. from (select @r:=0) x,
  3. (select 'x' xx union select 'v' xx union select 'z' xx) z;

+------+
| zxz |
+------+
| a |
| b |
| c |
+------+

3 rows in set (0.00 sec)

Ahora YA puedo meter ese resultado en un cursor!! :P:P


EDITO:

El anterior era un fraude... al menos no he sabido usarlo bien xD. El caso es que buscando más he conseguido una todavía más simple:
Código MySQL:
Ver original
  1. SELECT SUBSTRING_INDEX( SUBSTRING_INDEX( 'a|b|c|d|e|f|g|h', '|', indice), '|', -1 )
Donde indice es la "posición" de la palabra que quieres extraer. Por lo que si ponemos: indice = 1 obtendremos 'a'; ó si ponemos indice = 3 obtendremos 'c'. Ahora ya puedo trabajar con lo que quería!! :D

E aquí mi procedure:

Código MySQL:
Ver original
  1. CREATE PROCEDURE curdemo(IN tags VARCHAR(100), IN tam INT)
  2.     DECLARE indice INT;
  3.     DECLARE word VARCHAR(100);
  4.    
  5.     SET indice = tam;
  6.     WHILE indice > 0 DO
  7.         SELECT SUBSTRING_INDEX( SUBSTRING_INDEX( tags, ',', indice), ',', -1 ) INTO word;
  8.         -- Hacemos los que necesitamos; en la variable word tenemos la palabra que buscamos
  9.         SET indice = indice - 1;
  10.     END WHILE;
  11. END//

EDITO:

Mucho mejor!!!!! :P:
Código MySQL:
Ver original
  1. CREATE PROCEDURE curdemo(IN tags VARCHAR(100))
  2.     DECLARE indice INT;
  3.     DECLARE tam INT;
  4.     DECLARE word VARCHAR(100);
  5.     DECLARE aux VARCHAR(100) DEFAULT tags;
  6.     declare delim VARCHAR(1) DEFAULT ',';
  7.    
  8.     SET tam = (length(aux)-length(REPLACE(aux, delim, '')))/length(delim) + 1 ;
  9.    
  10.     SET indice = tam;
  11.     WHILE indice > 0 DO
  12.         SET word = SUBSTRING_INDEX( SUBSTRING_INDEX( tags, delim, indice), delim, -1 );
  13.         -- Hacemos los que necesitamos; en la variable word tenemos la palabra que buscamos
  14.         SET indice = indice - 1;
  15.     END WHILE;
  16.  
  17. END//

De esta forma, simplemente con pasarle el string, ni si quiera el tamaño, ya te lo trabaja :P

Última edición por Bloodsucker; 02/03/2010 a las 16:13