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

Mostrar informacion en base a una celda de una columna concreta

Estas en el tema de Mostrar informacion en base a una celda de una columna concreta en el foro de Bases de Datos General en Foros del Web. Hola a todos. Estoy con MySQL intentando coger información sobre varios autores metidos en una misma celda de una columna. Lo que necesito, basicamente, es ...
  #1 (permalink)  
Antiguo 18/09/2015, 02:13
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Mostrar informacion en base a una celda de una columna concreta

Hola a todos.

Estoy con MySQL intentando coger información sobre varios autores metidos en una misma celda de una columna.

Lo que necesito, basicamente, es coger de esa misma celda los nombres y apellidos separados por punto y coma.

Código SQL:
Ver original
  1. Apellido1, Nombre1; Apellido2, Nombre2; Apellido3, Nombre3;

Ademas que solo muestre los que tienen mas de un autor y menos de cuatro. Creo que podia ser algo parecido a lo que escribo a continuacion pero evidentemente esta mal la sintaxis.

Código SQL:
Ver original
  1. SELECT Author FROM autismo WHERE Author LIKE '%;%' AND Author LIKE '%;%;%'

Saludos y Gracias.

Última edición por Mr_Raymon; 18/09/2015 a las 02:30
  #2 (permalink)  
Antiguo 18/09/2015, 08:46
 
Fecha de Ingreso: enero-2013
Mensajes: 176
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Mostrar informacion en base a una celda de una columna concreta

Buen día,

Para empezar creo que el diseño de tu BD no es el ideal te vas a enredar mucho haciendo consultas sobre texto,

Si puedes cambiarlo, te sugiero lo siguiente (es solo un ejemplo):

Tabla libro:
- IdLibro
- Nombre
- Descripcion
- Editorial
- etc

Tabla Autor
- Nombre
- Apellido 1
- Apellido 2
- Area
- etc

Tabla Relacion LibroAutor
-IdLibro
-IdAutor

Como puedes observar en la última tabla, se tiene una relacion de muchos a muchos un autor puede tener muchos libro y un libro puede tener varios autores...

...Aclarado esto, las consultas que requieres serian mas sencillas

Código SQL:
Ver original
  1. SELECT libro.Nombre
  2. FROM   LibroAutor INNER JOIN Libro ON Libro.idLibro = LibroAutor.idLibro
  3. HAVING COUNT(IdLibro) > 1 AND COUNT(IdLibro) < 5

Algo asi, espero te ayude
__________________
Define tus intereses, se curioso, investiga, comete errores, aprende, practica, mejora, enseña y vuelve a comenzar....

Última edición por gnzsoloyo; 18/09/2015 a las 09:05
  #3 (permalink)  
Antiguo 19/09/2015, 05:41
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Mostrar informacion en base a una celda de una columna concreta

Cita:
Iniciado por Paty_RR Ver Mensaje
Buen día,

Para empezar creo que el diseño de tu BD no es el ideal te vas a enredar mucho haciendo consultas sobre texto,

Si puedes cambiarlo, te sugiero lo siguiente (es solo un ejemplo):

Tabla libro:
- IdLibro
- Nombre
- Descripcion
- Editorial
- etc

Tabla Autor
- Nombre
- Apellido 1
- Apellido 2
- Area
- etc

Tabla Relacion LibroAutor
-IdLibro
-IdAutor

Como puedes observar en la última tabla, se tiene una relacion de muchos a muchos un autor puede tener muchos libro y un libro puede tener varios autores...

...Aclarado esto, las consultas que requieres serian mas sencillas

Código SQL:
Ver original
  1. SELECT libro.Nombre
  2. FROM   LibroAutor INNER JOIN Libro ON Libro.idLibro = LibroAutor.idLibro
  3. HAVING COUNT(IdLibro) > 1 AND COUNT(IdLibro) < 5

Algo asi, espero te ayude
Lo primero gracias por contestar. Por desgracia es una base de datos ya hecha y no se puede cambiar los datos.

¿No es posible realizar la consulta? Pienso que si pero seguramente sea muchísimo complicado de lo que parece. La sintaxis tendría que ser muy larga, lo cual seria un gran problema.
  #4 (permalink)  
Antiguo 19/09/2015, 06:19
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: Mostrar informacion en base a una celda de una columna concreta

Cita:
Lo primero gracias por contestar. Por desgracia es una base de datos ya hecha y no se puede cambiar los datos.

¿No es posible realizar la consulta? Pienso que si pero seguramente sea muchísimo complicado de lo que parece. La sintaxis tendría que ser muy larga, lo cual seria un gran problema.
No. Si tienes una base mal diseñada, como esa, lo que tienes es datos basura (redundancia, inconsistencia.
En ese contexto, hay dos soluciones: 1) Modificas la base para que esté bien construida, y con datos que sirvan, o 2) Resuelves el resultado por programación.
SQL no está diseñado para hacer consultas con datos sucios como los de tener campos multivaluados (que están prohibidos en las BBDD Relacionales).
Además, como MySQL no tiene arrays, tampoco tiene funciones que las manejen, y en consecuencia no puede leer los datos de la forma que quieres.
__________________
¿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 23/09/2015, 02:53
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Mostrar informacion en base a una celda de una columna concreta

Perdón por no contestar en los últimos días pero es que andaba liado.

Por desgracia, no puedo cambiar la base de datos porque esta organizada de esa manera.

De todas formas me gustaría saber como organizaríais la información, en este caso, de autores de libros y publicaciones en revistas.

Saludos y Gracias.
  #6 (permalink)  
Antiguo 23/09/2015, 12:14
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Mostrar informacion en base a una celda de una columna concreta

Buenas,

Para resolver tu problema sin cambiar el modelo puedes utilizar expresiones regulares.
https://dev.mysql.com/doc/refman/5.0/en/regexp.html

En tu caso, diria de forma rapida (igual me equivoco, hay que probar) que seria algo como:
Código SQL:
Ver original
  1. SELECT Author FROM autismo WHERE Author REGEXP '{1,3};'


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #7 (permalink)  
Antiguo 29/09/2015, 03:29
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 119
Antigüedad: 14 años, 4 meses
Puntos: 2
Respuesta: Mostrar informacion en base a una celda de una columna concreta

He probado lo que me has dicho, Profesor Falken pero me da error y no funciona.

La verdad es que lo he dado por perdido y es mejor organizar la informacion de otra manera.

¿Que os parece la medida?

Saludos.
  #8 (permalink)  
Antiguo 29/09/2015, 09:07
 
Fecha de Ingreso: enero-2013
Mensajes: 176
Antigüedad: 11 años, 3 meses
Puntos: 2
Respuesta: Mostrar informacion en base a una celda de una columna concreta

No estoy muy familiarizada con MySQL pero se me ocurre que puedes hacer esto a mano si no hay otra opción.

1.- Has tu consulta la que te traera todos los registros que necesites
2.- Has un ciclo donde recorras cada renglon que te devolvio tu consulta
3.- Crea una variable entero que sea tu contador de autores e inicializala en 00
4.- Puedes ir recorriendo tu cadena donde tienes el nombre y apellidos y por cada ';' que encuentres aumenta un contador de autores...
5.- Despues de recorrer todo tu campo de autores, verifica si tu contador es mayor a 2 y menor a 5 entonces guardas o muestras ese registro del libro....


Espero te sirva se ve simple, en realidad aunque sean cadenas si las puedes manipular a mano, las podras manipular en la PC, solo que harás mas lineas de código de las que deberías si tuvieres una buenas base de datos!


Saludos!
__________________
Define tus intereses, se curioso, investiga, comete errores, aprende, practica, mejora, enseña y vuelve a comenzar....

Etiquetas: celda, columna, informacion, mysql, select
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 16:35.