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

Multiples consultas atraves de un campo Mysql

Estas en el tema de Multiples consultas atraves de un campo Mysql en el foro de Mysql en Foros del Web. Hola, veran, estoy realizando un proyectillo para la escuela de una biblioteca escolar y estoy atorado en la seccion de prestamos especificamente en la seccion ...
  #1 (permalink)  
Antiguo 17/03/2011, 08:44
 
Fecha de Ingreso: marzo-2011
Mensajes: 8
Antigüedad: 13 años, 1 mes
Puntos: 0
Sonrisa Multiples consultas atraves de un campo Mysql

Hola, veran, estoy realizando un proyectillo para la escuela de una biblioteca escolar y estoy atorado en la seccion de prestamos especificamente en la seccion de devolucion.

Para prestamos, el principal problema que encuentro es que tengo tablas por cada materia:

1 tabla biologia
1 tabla de matematicas
1 tabla de historia
etc
etc

Les dejo unas capturas de lo ke tengo:
Vista Diseño


Tabla biologia


Tabla Prestamos


Tabla Usuarios



El modulo de devolucion se me ocurre que traiga todos los libros que estan en la tabla prestamos pero ya con nombre del usuario, titulo del libro, fecha de prestamo. OSea una completa descripcion del libro prestado...todo esto dentro de un <SELECT> y a lado un <textbox> que contenga el formato fecha para que se ingrese la fecha de devolucion. Algo que se viera como esto:



Pero que como tengo varias tablas de varias materias, quisiera especificar aparte del titulo del libro lo que tengo en el campo categoria de la tabla prestamos, que especificaria la categoria a la que pertenece

#Libro - Usuario - Titulo - Categoria
1 - juan diaz - Java - [Programacion]
1 - laura diaz - la vida - [biologia]
2 - luis lopez - ecuaciones -[matematicas]
2 - victor ortiz - ortografia -[español]


Pero nose como traeria los datos de usuarios y libros por medio de una consulta a varias tablas

Esta seria mi sintaxis que me arroja el resultado para el caso de que solo tuviese una tabla de libros..........PERO TENGO COMO 15 tablas, una por cada materia.


Código:
$consulta = "SELECT prestamos.id_prestamo AS id, usuarios.nombre as nombre, 
        usuarios.apellidos as apellidos, bilologia.titulo as titulo, 
        prestamos.prestamo as prestamo, prestamos.devolucion as devolucion 
        FROM prestamos, usuarios, biologia
        WHERE prestamos.id_usuario=usuarios.id_usuario 
        AND prestamos.id_libro=biologia.id_libro 
        AND prestamos.devolucion='0000-00-00'
        ORDER BY apellidos ASC";

Osea yo pienso que solo traeria libros de las tablas que especifica mi campo CATEGORIA, por ejempo si hay:

3 prestamos de biologia
2 prestamos de matematicas
1 prestamo de historia
4 de programacion

como traer los datos de estas tablas que para referencia estan en el campo CATEGORIA de la tabla prestamos.


Agradeceria su ayuda :D
GRacias

Última edición por x3435; 17/03/2011 a las 08:51 Razón: no se ven las imagenes
  #2 (permalink)  
Antiguo 17/03/2011, 09:23
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Tema movido desde PHP a Mysql
  #3 (permalink)  
Antiguo 17/03/2011, 10:56
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: Multiples consultas atraves de un campo Mysql

Parece un defecto de diseño. Biología no es una entidad de un sistema de biblioteca, sino un valor de una categoría a la que el libro pertenece. Esto implica que los atributos que le has puesto a Biología en realidad son atributos de Libro como entidad. Debería en ese caso existir una entidad denominada Tema o algo así y establecer a su vez una relación N:N ente Libro y Tema (o como quieras llamarlo) que relacione al libro con una temática en especial.
Dale una mirada a este diagrama y verás que esa es la forma de moldearlo más cercana a la realidad y que sí te puede devolver todo eso en una sola consulta:

Modelo Básico:



Modelo extendido (con libros por categoría y libros por autor):



Fíjate en especial en la nota del diseñador: "La tabla Books_by_Category permite que un Book pueda ser de más de una Category"
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 17/03/2011 a las 11:02
  #4 (permalink)  
Antiguo 17/03/2011, 18:04
 
Fecha de Ingreso: marzo-2011
Mensajes: 8
Antigüedad: 13 años, 1 mes
Puntos: 0
Exclamación Respuesta: Multiples consultas atraves de un campo Mysql

Ok, creo ke si es problema de diseño..

Entonces, ahora pienso crear 4 tablas:

-Prestamos
*id
*id_libro
*id_usuario
*fecha_prestamo
*fecha_devolucion


-Usuarios
*id
*id_usuario
*nombre
*apellidos
*turno

-Libros
*id
*id_libro
*titulo
*autor
*editorial
*existencia
*id_categoria


-Categorias
*id_categoria
*nombre


Que opinan?
  #5 (permalink)  
Antiguo 17/03/2011, 18:13
 
Fecha de Ingreso: marzo-2011
Ubicación: Veracruz
Mensajes: 92
Antigüedad: 13 años, 1 mes
Puntos: 3
Respuesta: Multiples consultas atraves de un campo Mysql

A excepción de que no veo conveniente de que en las tablas Usuarios y Libros tengas 2 ID's, se me hace que está bien.
  #6 (permalink)  
Antiguo 17/03/2011, 18:21
 
Fecha de Ingreso: marzo-2011
Mensajes: 8
Antigüedad: 13 años, 1 mes
Puntos: 0
Exclamación Respuesta: Multiples consultas atraves de un campo Mysql

Cita:
Iniciado por gmurop Ver Mensaje
A excepción de que no veo conveniente de que en las tablas Usuarios y Libros tengas 2 ID's, se me hace que está bien.
-Usuarios
*id-->1,2,3,infinito
*id_usuario ---->numero de cuenta por ejemplo: 06070185
*nombre
*apellidos
*turno

-Libros
*id--->1,2,3,infinito
*id_libro---->NOTA:Numero de Libro
*titulo
*autor
*editorial
*existencia
*id_categoria


En numero de libro es por ke, existe por ejemplo la categoria Biologia y los libros vienen numerados del 1 al 25.........y por ejemplo la categoria matematicas viene numerado igual del 1 al 56. Entonces los usuarios usualmente llegan y piden

"me da el 5 de biologia y el 5 de matematicas"

Supongo ke las llaves primarias serian los campos "id" en Prestamos, Usuarios y Libros e "id_categoria" en Categorias.

Espero este bien :D ......... no es necesario especificar foreign key en este ejercicio verdad?
  #7 (permalink)  
Antiguo 17/03/2011, 18:27
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: Multiples consultas atraves de un campo Mysql

Eso es un error conceptual.
Cada ejemplar de una obra tiene su propio libro_id. Si se trata de parte de una colección categorizada, eso implica datos de edición que pueden componer otra tabla u otra relación, pero eso es independiente de la instancia Libro.
Ese caso requiere un modelado más fino para establecer cómo representarlo en el modelado de la base, pero no implica generar ese campo ID (además, jamás uses nombres genéricos como ID en una tabla, tienden a generar confusiones luego).
Mañana te posteo algo de eso. Hoy ya es muy tarde.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 17/03/2011, 18:32
 
Fecha de Ingreso: marzo-2011
Ubicación: Veracruz
Mensajes: 92
Antigüedad: 13 años, 1 mes
Puntos: 3
Respuesta: Multiples consultas atraves de un campo Mysql

Ok entiendo, tu id es un auto_increment, pero el id_usuario y el id_libro son datos únicos al parecer, por lo tanto puedes usarlos como llave primaria y asi te ahorrarías un par de campos.

Saludos
  #9 (permalink)  
Antiguo 17/03/2011, 18:35
 
Fecha de Ingreso: marzo-2011
Mensajes: 8
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Multiples consultas atraves de un campo Mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Eso es un error conceptual.
Cada ejemplar de una obra tiene su propio libro_id. Si se trata de parte de una colección categorizada, eso implica datos de edición que pueden componer otra tabla u otra relación, pero eso es independiente de la instancia Libro.
Ese caso requiere un modelado más fino para establecer cómo representarlo en el modelado de la base, pero no implica generar ese campo ID (además, jamás uses nombres genéricos como ID en una tabla, tienden a generar confusiones luego).
Mañana te posteo algo de eso. Hoy ya es muy tarde.

En este caso....por numero es como identifican a los libros, ese numero viene pegado en cada libro y asi los acomodan en los muebles.

Me tratas de decir ke entonces los ke estan mal son los de la biblioteca por hacerlo de esa manera?

:( ayuda por favor........ya no se como realizarlo :(
  #10 (permalink)  
Antiguo 17/03/2011, 18:39
 
Fecha de Ingreso: marzo-2011
Mensajes: 8
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Multiples consultas atraves de un campo Mysql

Cita:
Iniciado por gmurop Ver Mensaje
Ok entiendo, tu id es un auto_increment, pero el id_usuario y el id_libro son datos únicos al parecer, por lo tanto puedes usarlos como llave primaria y asi te ahorrarías un par de campos.

Saludos
ASi es id es autoincrementable y unico......pero el id_libro no es unico :( porke en mi tabla LIBROS numero por ejemplo los de biologia del 1 al 25 y en seguida los de matematicas del 1 al 50......entonces ese campo siempre hay repeticiones. Por eso genere id ke podria ser primary key

Que opinas de lo que me dice gnzsoloyo......


Aki una imagen de la tabla libros recien creada en donde tengo 2 categorias:

1: administracion
2: algebra



Noten que es lo que les digo........tengo ke repetir el numero del libro porque asi los identifican ellos :(

Última edición por x3435; 17/03/2011 a las 18:46 Razón: agregar imagen
  #11 (permalink)  
Antiguo 18/03/2011, 05:37
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: Multiples consultas atraves de un campo Mysql

En este caso, ese ID corresponde a un numero de orden, pero no es clave primaria. Es un orden temático u orden de asignatura, pero en cualquier caso no compone la clave primaria de Libro.

Este tipo de casos se denomina clave candidata si se la combina con el categoría_id, por cuanto no puede haber dos libros de la misma categoría que posean el mismo número de orden. ¿Se comprende el concepto?

Aclaremos más: Se denominan claves candidatas a todas las combinaciones de campos de una misma tabla que puedan cumplir con la definición de clave primaria, es decir, identificar unívocamente un único registro en una tabla. Determinar las claves candidatas (CC) es una parte importante de la normalización de la base de datos, porque de ese modo se puede elegir a la más simple para usar como PK, y entre otras cosas ayuda a definir índices secundarios.

Desde el punto de vista ortodoxo del modelo, si quisieras suprimir la PK autoincremental que has puesto lo podría hacer perfectamente, porque con esa CC (nro_orden, categoria_id) es suficiente para encontrar un único ejemplar de libro en la biblioteca.
De todos modos, como ya existe una forma de identificar libros propia de la biblioteca (el libro_id) no es posible usar esa CC, por mejor que sea.

En resumen:
- Ese campo no es clave por sí mismo, se puede usar como índice secundario en combinación con el id de la categoría.
- La existencia de ese campo no invalida ni afecta la existencia de la PK planteada en la tabla. son cosas diferentes.
- La PK sólo tiene un campo: libro_id.

Un tip adicional: Según las reglas de normalización, sólo se debe incluir una clave numérica y autoincremental si llegados a la Tercera Forma Normal (3FN) no existe aún una clave candidata.

El problema es que para los programadores es más fácil pensar en claves numéricas, que comprender los conceptos de las formas normales y las claves candidatas... Simplemente le ponen un campo numérico y después, cuando haya que integrar bases de datos, o hacer migraciones, que se las arregle Magoya...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 18/03/2011 a las 06:11
  #12 (permalink)  
Antiguo 23/03/2011, 09:03
 
Fecha de Ingreso: marzo-2011
Mensajes: 8
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Multiples consultas atraves de un campo Mysql

Al final, es un proyecto sencillo....por el momento necesito saber si es funcional de esta manera....para que funcione de la manera mas sencilla



  #13 (permalink)  
Antiguo 23/03/2011, 09:10
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: Multiples consultas atraves de un campo Mysql

Mmmm... La tabla status, si tiene pocas opciones, se puede suprimir y poner status como columna ENUM o SET de un conjunto de valores (yo le cambiaría el nombre porque status es una palabra reservada de MySQL), pero en definitiva es una decisión de diseño. Técnicamente no es incorrecto.

Fuera de eso, me parece que está todo bien.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 23/03/2011, 09:38
 
Fecha de Ingreso: marzo-2011
Mensajes: 8
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Multiples consultas atraves de un campo Mysql

MUchas gracias gnzsoloyo, suprimire esa tabla de status y la metere como campo dentro de la tabla prestamos con un nombre como "estado".

sin mas por el momento, agradezco su respuesta....si surge alguna duda, espero contar con ustedes para resolverla.

GRAcias

Etiquetas: multiples, php, campos
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 15:38.