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

Dividir texto de un registro

Estas en el tema de Dividir texto de un registro en el foro de Mysql en Foros del Web. Hola! Soy muy novata en el foro asíq ue perdonadme si hago alguna pregutna que no corresponda aquí. Resulta que tengo que hacer una consulta ...
  #1 (permalink)  
Antiguo 04/03/2014, 09:05
 
Fecha de Ingreso: abril-2013
Mensajes: 4
Antigüedad: 11 años
Puntos: 0
Dividir texto de un registro

Hola!

Soy muy novata en el foro asíq ue perdonadme si hago alguna pregutna que no corresponda aquí.

Resulta que tengo que hacer una consulta a la base de datos y uno de los registros guarda varios datos. Ejemplo

TABLA: Persona

- Nombre-> Lovaina
- Ciudad-> Gottam
- Gustos-> Dibujar\Cantar\Programar\Leer
- Edad-> null

Me gustaría saber el total de personas que les gusta leer, dibujar, leer y programar. Es posible hacerlo en una consulta o debería hacerlo a través de php?

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 04/03/2014, 12:47
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Dividir texto de un registro

Has tomado una mala decisión al separar los gustos dentro de un mismo campo, lo que se llama campo multivaluado. La solución correcta sería tener una tabla de gustos, con su PKgusto y otra de gustos_personas, esta última con la FKpersona y FKgusto, relacionadas respectivamente con los PK de esas tablas. Esa sería la solución correcta en una base de datos relacional. Eso te permitiría hacer las consultas que buscas y una administración más cómoda.
Son búsquedas del tipo
Código MySQL:
Ver original
  1. ... WHERE FKgusto IN (1,3,4) GROUP BY FKpersona HAVING COUNT (DISTINCT FKgusto) = 3
  #3 (permalink)  
Antiguo 05/03/2014, 05:26
 
Fecha de Ingreso: abril-2013
Mensajes: 4
Antigüedad: 11 años
Puntos: 0
Respuesta: Dividir texto de un registro

Sí, sé que no es una buena decisión pero la bbdd ya me viene dada y no puedo modificarla
  #4 (permalink)  
Antiguo 05/03/2014, 05:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Dividir texto de un registro

Bueno, tal vez no puedas modificarla, pero si podrías agregar un par de tablas para corregir el desastre, o bien convencer a quienes te la dieron que como está es basura. Y que para que sea eficiente tienes que corregirla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 05/03/2014, 08:12
 
Fecha de Ingreso: abril-2013
Mensajes: 4
Antigüedad: 11 años
Puntos: 0
Respuesta: Dividir texto de un registro

Sí, tendré que modificarla para poderlo hacer. Porque hacerlo a través de php me parece una exageración, más que nada porque si hay 1000 registros 1000 veces que deberá repetir el proceso.

Muchas gracias!!
  #6 (permalink)  
Antiguo 05/03/2014, 09:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Dividir texto de un registro

Hay algunas otras opciones para solucionar temporalmente el desastre. Ya sé que es una chapuza, pero a veces puede darse una solución de urgencia, aunque no sea lo mejor. No la he probado, pero quizás funcionaría. Puedes hacer tres consultas con UNION ALL y en el WHERE de cada una de ellas filtras por cada uno de los datos. Luego haces subconsulta, agrupas por Nombre y te traes los nombres que tengan tres resultados

Código MySQL:
Ver original
  1. SELECT t1.Nombre FROM  ((SELECT Nombre FROM persona WHERE gustos LIKE '%Dibujar%')
  2.  (SELECT Nombre FROM persona WHERE gustos LIKE '%Leer%')
  3.  SELECT Nombre FROM persona WHERE gustos LIKE '%Programar%'))t1
  4.  GROUP BY t1.Nombre  HAVING COUNT(*) = 3

Etiquetas: dividir, null, php, registro, tabla
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 14:42.