Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Reemplazar o borrar un "str" de un "str_list"

Estas en el tema de Reemplazar o borrar un "str" de un "str_list" en el foro de Mysql en Foros del Web. Llevo desde ayer intentando hacer esto no encuentro solucion, os agradezco cualquier ayuda que podais darme : Tengo un campo en una columna algo que ...
  #1 (permalink)  
Antiguo 02/05/2011, 15:04
 
Fecha de Ingreso: mayo-2011
Mensajes: 25
Antigüedad: 12 años, 11 meses
Puntos: 1
Reemplazar o borrar un "str" de un "str_list"

Llevo desde ayer intentando hacer esto no encuentro solucion, os agradezco cualquier ayuda que podais darme :

Tengo un campo en una columna algo que mysql llama una str_list por ejemplo algo como esto (4,6,1,9,18) me gustaria saber como reemplazar uno de los string por 0 o en su defecto borrar el str (comas incluido).

He intentado con esto :
(4,6,1,9,18) para el ejemplo

UPDATE tabla_seleccionada SET campo_string_list = REPLACE(campo_string_list,'FIND_IN_SET('1',campo_s tring_list)','') WHERE id='6'

con esto solo consigo que elimine el 1 , del stringlist y me deja esto: (4,6,,9,8)
es decir borra todos los caracteres "1". mi intension es que por ejemplo 18,100, 112, etc queden intactos

los numeros 1 y 6 serian $variables.

Muchas gracias
  #2 (permalink)  
Antiguo 02/05/2011, 15:42
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Reemplazar o borrar un "str" de un "str_list"

Hola mikexloo:

A estas horas de la tarde (4:30 pm en México) y con el estómago vacío no se me ocurren muchas cosas, pero prueba con esto;

Código MySQL:
Ver original
  1. mysql> create table tabla_find (texto varchar(50));
  2. Query OK, 0 rows affected (0.11 sec)
  3.  
  4. mysql> insert into tabla_find values ('4,6,1,9,18'), ('1,11,111,11111,100001'),
  5. ('21,31,41,51');
  6. Query OK, 3 rows affected (0.05 sec)
  7. Records: 3  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> select * from tabla_find;
  10. +-----------------------+
  11. | texto                 |
  12. +-----------------------+
  13. | 4,6,1,9,18            |
  14. | 1,11,111,11111,100001 |
  15. | 21,31,41,51           |
  16. +-----------------------+
  17. 3 rows in set (0.00 sec)
  18.  
  19. mysql> update tabla_find set texto = substr(replace(concat(',', texto, ','), ',1
  20. ,', ','), 2, length(replace(concat(',', texto, ','), ',1,', ',')) - 2);
  21. Query OK, 2 rows affected (0.03 sec)
  22. Rows matched: 3  Changed: 2  Warnings: 0
  23.  
  24. mysql> select * from tabla_find;
  25. +---------------------+
  26. | texto               |
  27. +---------------------+
  28. | 4,6,9,18            |
  29. | 11,111,11111,100001 |
  30. | 21,31,41,51         |
  31. +---------------------+
  32. 3 rows in set (0.00 sec)

En el ejemplo estoy eliminando los 1's, para eliminar algún otro elemento lo único que tendrías que cambiar es esta intrucción:

Código:
replace(concat(',', texto, ','), ',1,', ',')
la idea que se me ocurrió es concatenar una coma al inicio y fin de la cadena y buscar justamente el elemento entre comas (,1,) y sustituirlo por una (,). Al final con el substring "recortas" la cadena para eliminar las comas del inicio y fin de la cadena. Seguramente hay alguna otra forma de hacer esto mismo, optimizando código, pero de primera es lo único que se me ocurre. Si encuentro alguna otra solución mañana la posteo.

Saludos
Leo.
  #3 (permalink)  
Antiguo 02/05/2011, 15:43
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Reemplazar o borrar un "str" de un "str_list"

Eso lo tendrías que hacer con un poco de programación. Ya sea desde una función de mysql o desde el lenguaje.

O tal vez salga de una consulta de unas cuantas paginas.

sdaludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 02/05/2011, 16:14
 
Fecha de Ingreso: mayo-2011
Mensajes: 25
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Reemplazar o borrar un "str" de un "str_list"

Gracias tio, habia pensado que tenia que hacer algo como esto pero no creo que hubiera llegado a descubrirlo tan pronto como tu, seguiré trabajando tambien por si encuentro un metodo mas corto, aun estoy intentando entender que hace el 2 y el -2 pero para mañana seguro que lo entiendo

Muchas gracias

Pdta. Por favor no es necesario que respondas sin comer XD

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola mikexloo:

A estas horas de la tarde (4:30 pm en México) y con el estómago vacío no se me ocurren muchas cosas, pero prueba con esto;

Código MySQL:
Ver original
  1. mysql> create table tabla_find (texto varchar(50));
  2. Query OK, 0 rows affected (0.11 sec)
  3.  
  4. mysql> insert into tabla_find values ('4,6,1,9,18'), ('1,11,111,11111,100001'),
  5. ('21,31,41,51');
  6. Query OK, 3 rows affected (0.05 sec)
  7. Records: 3  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> select * from tabla_find;
  10. +-----------------------+
  11. | texto                 |
  12. +-----------------------+
  13. | 4,6,1,9,18            |
  14. | 1,11,111,11111,100001 |
  15. | 21,31,41,51           |
  16. +-----------------------+
  17. 3 rows in set (0.00 sec)
  18.  
  19. mysql> update tabla_find set texto = substr(replace(concat(',', texto, ','), ',1
  20. ,', ','), 2, length(replace(concat(',', texto, ','), ',1,', ',')) - 2);
  21. Query OK, 2 rows affected (0.03 sec)
  22. Rows matched: 3  Changed: 2  Warnings: 0
  23.  
  24. mysql> select * from tabla_find;
  25. +---------------------+
  26. | texto               |
  27. +---------------------+
  28. | 4,6,9,18            |
  29. | 11,111,11111,100001 |
  30. | 21,31,41,51         |
  31. +---------------------+
  32. 3 rows in set (0.00 sec)

En el ejemplo estoy eliminando los 1's, para eliminar algún otro elemento lo único que tendrías que cambiar es esta intrucción:

Código:
replace(concat(',', texto, ','), ',1,', ',')
la idea que se me ocurrió es concatenar una coma al inicio y fin de la cadena y buscar justamente el elemento entre comas (,1,) y sustituirlo por una (,). Al final con el substring "recortas" la cadena para eliminar las comas del inicio y fin de la cadena. Seguramente hay alguna otra forma de hacer esto mismo, optimizando código, pero de primera es lo único que se me ocurre. Si encuentro alguna otra solución mañana la posteo.

Saludos
Leo.
  #5 (permalink)  
Antiguo 03/05/2011, 08:14
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Reemplazar o borrar un "str" de un "str_list"

Hola mikexloo:

No encontré alguna otra manera más corta de hacer lo que pides, igual y a alguien más se le puede ocurrir algo mejor, o tal como lo comenta el compañero huesos52 si estás trabajando con algún lenguaje de programación podrías hacerlo desde ahí en lugar de hacerlo en MySQL.

Por lo pronto te explico lo del 2 y el -2.

Supongamos que tienes esta cadena de entrada:

Código:
4,6,1,9,18
El prime paso es agregar una coma al inicio y al fin de la cadena, de tal manera que te quede esto:

Código:
,4,6,1,9,18,
Ahora si, con esta cadena "eliminas" el elemento que deseas, el cual debe estar entre comas, por lo tanto la función replace quedaría así:

Código MySQL:
Ver original
  1. mysql> select replace(',4,6,1,9,18,', ',1,', ',');
  2. +-------------------------------------+
  3. | replace(',4,6,1,9,18,', ',1,', ',') |
  4. +-------------------------------------+
  5. | ,4,6,9,18,                          |
  6. +-------------------------------------+
  7. 1 row in set (0.00 sec)

Ahora si, viene la parte del 2 y el -2, si observas la cadena resultante contiene una coma al inicio y al final de la cadena, por lo tanto hay que eliminarlas. lo que haces es un substring de su cadena tomando los caracteres a partir de la posición 2, y para calcular la longitud de la cadena resultante obtienes la longitud de la cadena original -2 (es decir, sin las dos comas). en otras palabras sería algo como esto:

Código MySQL:
Ver original
  1. mysql> select substring(',4,6,9,18,', 2, 8);
  2. +-------------------------------+
  3. | substring(',4,6,9,18,', 2, 8) |
  4. +-------------------------------+
  5. | 4,6,9,18                      |
  6. +-------------------------------+
  7. 1 row in set (0.00 sec)

Código:
Longitud(',4,6,9,18,') - 2 -> 10 - 2 = 8
Espero que con esta explicación haya quedado más claro lo que hice, ojalá que te pueda servir y esperemos que alguien tenga algo mejor.

Saludos.
Leo
  #6 (permalink)  
Antiguo 03/05/2011, 12:13
 
Fecha de Ingreso: mayo-2011
Mensajes: 25
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Reemplazar o borrar un "str" de un "str_list"

Ya habia entendido que hacia el 2 y el -2 pero te agradezco toda la ayuda leo, Gracias a todos por la ayuda , si encuentro otro metodo os lo haré saber.
Quiza hay alguna manera de suprimir "str_list" menos un FIND_IN_SET pero creo que tendrè que concatener las comas nuevamente.

En fin si encuentro una idea mejor lo comentaré
Muchas gracias a todos.

Etiquetas: borrar, reemplazar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:13.