Mysql elimina la palabra específica en una secuencia separada por comas

Mi mesa tenía un campo de ‘tags’ como este:

Etiquetas

tag1, tag2, tag3

Cómo eliminar ‘, tag2’ incluyendo la coma usando la consulta de MySQL.

Para un tipo de datos SET, podría usar algo como esto:

CREATE TABLE sets(tags SET('tag1','tag2','tag3')); INSERT INTO sets VALUES ('tag1,tag2'), ('tag1,tag3,tag2'), ('tag2,tag3'), ('tag3,tag1'); UPDATE sets SET tags = tags &~ (1 << FIND_IN_SET('tag2', tags) - 1); SELECT * FROM sets; +-----------+ | tags | +-----------+ | tag1 | | tag1,tag3 | | tag3 | | tag1,tag3 | +-----------+ 

Aparte de la primera respuesta que no probé y, por lo tanto, no tengo una opinión al respecto, las otras fallarían en los siguientes casos:

 1- tags = "tag1,tag2,tag22,tag3" 2- tags = "tag2,tag1,tag3" 

en el primer ejemplo, la función REPLACE (tags, ‘tag2’, ”) eliminará el tercer valor de separación de coma, es decir, tag22 también, y en el segundo ejemplo tag2 no será reemplazado por REPLACE (tags, ‘, tag2’, ”)

una posible solución puede ser:

 REPLACE(REPLACE(CONCAT(',', tags, ','), 'tag2', ''), ',,', ',') 

el problema con mi solución es que siempre terminará teniendo almacenes de valores con comas redundantes tanto al principio como al final de la cadena. pero en mi caso funciona bien.

Creo que la mejor respuesta para tal problema está en el siguiente enlace. ¿Cuál es la mejor manera de eliminar el valor del campo SET?

la consulta debería ser así, que cubre el valor, el valor o solo el valor en la columna separada por comas

 ACTUALIZAR yourtable
 CONJUNTO
   categorías =
     TRIM (AMBOS ',' DE
       REEMPLAZAR(
         REPLACE (CONCAT (',', REPLACE (col, ',', ',,'), ','), ', 2,', ''), ',,', ','
     )
 DÓNDE
   FIND_IN_SET ('2', categorías)

Aquí puede tener su condición en la cláusula where. para más detalles, consulte el enlace de arriba.

Use la función de reemplazo en MySQL:

 replace(FIELD_NAME, 'find this string', 'replacement string'); 

entonces en tu caso:

 SELECT REPLACE('tag1,tag2,tag3', ',tag2', ''); 

Para obtener más detalles, consulte: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace

Encontré una solución, pero me encantaría saber si hay una manera más fácil de hacerlo … SELECT TRIM(BOTH ',' FROM (SELECT REPLACE(REPLACE('tag1,tag2,tag3','tag2',''),',,',',')))

Un consejo rápido:

 UPDATE sets SET tags = tags &~ (1 << FIND_IN_SET('tag2', tags) - 1); 

No funciona cuando su conjunto se ve así: 'tag1', 'tag2', 'tag3'

'tag3' se perderá con esta operación

Terminé usando un doble reemplazo simple:

 UPDATE sets SET tags = replace(replace(tags, 'tag2', ''), ',,', '') 

El reemplazo de envoltura elimina las comillas sobrantes de reemplazar solo 'tag2', ya que no puede estar seguro de si su tagg será el primer o el último elemento del conjunto

con respecto al caso de tag22 dejando un 2, haciéndolo sin liderar cero como lo hizo el PO, de todos modos estás obligado a tener problemas