MySQL - Buscar valor dentro de campo

 
Vista:
sin imagen de perfil
Val: 16
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Buscar valor dentro de campo

Publicado por Hercross (26 intervenciones) el 03/04/2018 23:09:09
Hola buenas noches..

Me preguntaba si sería posible lo siguiente..

Tengo un campo de mi DB que es del tipo:

Valor1=5;valor2=10;valor3=30

La cosa es si es posible sacar el calor de por ejemplo valor2..

Y para rizar el rizo, hacer un update del contenido de valor2?

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-1
Responder
sin imagen de perfil
Val: 2
Ha aumentado su posición en 2 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Buscar valor dentro de campo

Publicado por Juan Cruz (1 intervención) el 04/04/2018 01:39:08
Si te refieres a una consulta, aprende SQL que te servira de mucho para esas cosas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Buscar valor dentro de campo

Publicado por xve (1151 intervenciones) el 04/04/2018 07:04:03
Segun entiendo quieres hacer una consulta para obtener el valor2 y posteriormente actualizar dicho valor... lo tienes que hacer con dos consultas...

1
SELECT valor2 FROM Tabla

1
UPDATE Tabla SET valor2=99 WHERE valor2=10

No se si te puede servir...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 16
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Buscar valor dentro de campo

Publicado por Hercross (26 intervenciones) el 04/04/2018 07:18:01
Muchas gracias por responder...

Me he explicado mal..

Tengo una tabla con una serie de campos, el contenido de uno de ellos es valor1=5;valor2=10;valor3=30, cada valor separado por ;.

Lo que quería saber, es si se puede obtener el valor de valor2 (por ejemplo).

Si hago un select de esa campo, obtengo "valor1=5;valor2=10;valor3=30", lógicamente, ya que es el contenido de ese campo, pero quería saber si se podía obtener, con una sql, el valor de valor2..

Y despues poder hacerle un update..

La cosa es que tengo una aplicación que guarda en ese campo diferentes valores separados por ;, y necesito en ciertos momentos, poder obtener alguno en concreto, no todo el contenido, y en otros momentos poder actualizarlo..

No se si ahora me habré explicado..

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Buscar valor dentro de campo

Publicado por xve (1151 intervenciones) el 04/04/2018 11:38:20
Haber si te sirve así...

con esta instrucción, obtienes "valor2=10"
1
select SUBSTRING_INDEX(SUBSTRING_INDEX("valor1=5;valor2=10;valor3=30", ";", 2), ";",-1) as x

1
select SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX("valor1=5;valor2=10;valor3=30", ";", 2), ";",-1), "=",-1)
con esta instrucción obtienes el valor "10"

Te sirve?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 16
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Buscar valor dentro de campo

Publicado por Hercross (26 intervenciones) el 04/04/2018 13:37:10
Muchas gracias xve, si que me sirve si... Lo único, veo que para sacar el valor 10 buscas la posición 2.. en vez de buscar la posición 2 se pueden buscar por valor2?

Es porque no siempre guardan el.mismo orden..

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Buscar valor dentro de campo

Publicado por leonardo_josue (414 intervenciones) el 04/04/2018 20:42:48
Hola Hercross:

Con permiso de xve, aquí valdría primero una pregunta: ¿por qué diablos tienes un campo multivaluado en tus tablas? esto es un pésimo error de diseño, si estuvieras estudiando, seguramente tu profesor te reprobaría por hacer esto... si puedes cambiar tu modelo HAZLO y evita dolores de cabeza en el futuro.

Ahora bien, si te es imposible cambiar el modelo (y la pereza no es un motivo para no cambiarlo), entonces también puedes usar la función SUBSTRING_INDEX para obtener el valor no por posición, sino por el contenido de la cadena valor2, sería más o menos así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
mysql> SELECT * FROM tabla;
+------+-------------------------------+
| id   | campo                         |
+------+-------------------------------+
|    1 | valor1=5;valor2=10;valor3=30  |
|    2 | Valor1=5;valor=3;valor2=10    |
|    3 | valor2=43;valor3=10           |
|    4 | valor2=15                     |
|    5 | valor1=5;valor22=10;valor3=30 |
+------+-------------------------------+
5 rows in set (0.00 sec)
 
mysql> SELECT
    ->   campo,
    ->   SUBSTRING_INDEX(SUBSTRING_INDEX(campo, "valor2=", -1), ";", 1)
    -> FROM tabla;
+-------------------------------+----------------------------------------------------------------+
| campo                         | SUBSTRING_INDEX(SUBSTRING_INDEX(campo, "valor2=", -1), ";", 1) |
+-------------------------------+----------------------------------------------------------------+
| valor1=5;valor2=10;valor3=30  | 10                                                             |
| Valor1=5;valor=3;valor2=10    | 10                                                             |
| valor2=43;valor3=10           | 43                                                             |
| valor2=15                     | 15                                                             |
| valor1=5;valor22=10;valor3=30 | valor1=5                                                       |
+-------------------------------+----------------------------------------------------------------+
5 rows in set (0.00 sec)

Observa que la función sirve para encontrar el valor2 independientemente si está al inicio, en medio o al final de la cadena o incluso si es un valor único.

checa también que la consulta tiene un "error" en el último de los registros y es porque en el campo no existe la etiqueta valor2, sino que existe la etiqueta valor22... tendrías qué validar la lógica para omitir estos registros o en su defecto postear un valor null o cualquier constante que quieras.

Es importante que investigues y practiques el uso de la función SUBSTRING_INDEX y el resto de las funciones para el manejo de cadenas que tiene MySQL;

https://dev.mysql.com/doc/refman/5.7/en/string-functions.html

https://www.w3schools.com/sql/func_mysql_substring_index.asp

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Buscar valor dentro de campo

Publicado por xve (1151 intervenciones) el 04/04/2018 21:24:55
Muy bueno Leonardo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 16
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Buscar valor dentro de campo

Publicado por hercross (26 intervenciones) el 07/05/2018 14:00:22
Perfecto!! Me ha valido de 10..

Muchas gracias...

Y al revés se poría? Es decir, hacer un UPDATE solo de eso? Es decir, hacer un UPDATE del valor2??

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar