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

Select a 2 tablas o agregar campo?

Estas en el tema de Select a 2 tablas o agregar campo? en el foro de Mysql en Foros del Web. Bueno hasta para poner el titulo tuve problemas es que no se como se le llama a eso bueno mi pregunta es como podria obtener ...
  #1 (permalink)  
Antiguo 06/03/2009, 10:00
 
Fecha de Ingreso: septiembre-2008
Mensajes: 16
Antigüedad: 15 años, 7 meses
Puntos: 1
Pregunta Select a 2 tablas o agregar campo?

Bueno hasta para poner el titulo tuve problemas es que no se como se le llama a eso bueno mi pregunta es como podria obtener campos de 2 tablas pero que de una saque 5 filas y la segunda saque una columna de cada fila pero conforme a un campo, no se si me explico:
Tengo 2 tablas, una llamada personas y otra casas en el siguiente orden

-----personas-----
id
nombre
sexo
edad
-----------------------
-------casas--------
id
casa
propietario
fecha_compra
------------------------


supongamos que mi tabla personas tiene 20 registros, la de casa contiene 200, y cada persona puede tener varias casas, lo que deseo hacer es que me muestre 5 personas con la ultima casa que compraron ordenado por fecha_compra descendientemente y los campos a mostrar serian nombre casa y fecha_compra :S eh estado buscando sobre esto pero no encontre varias formas pero en ninguna les daba mas registros en una tabla que en otra :S
Sera posible?
lo estuve intentando pero no pude :s Y solo pense en agregar un campo a personas llamado ultima_casa y actualizarlo cada vez que una persone compre una nueva casa
sera buena solucion esta?

Última edición por mgtgilow; 06/03/2009 a las 10:03 Razón: cambio de titulo
  #2 (permalink)  
Antiguo 07/03/2009, 17:47
 
Fecha de Ingreso: septiembre-2008
Mensajes: 16
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Select a 2 tablas o agregar campo?

:S ninguna idea?
  #3 (permalink)  
Antiguo 08/03/2009, 01:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Select a 2 tablas o agregar campo?

Cita:
-----personas-----
id
nombre
sexo
edad
-----------------------
-------casas--------
id
casa
propietario
fecha_compra
------------------------


supongamos que mi tabla personas tiene 20 registros, la de casa contiene 200, y cada persona puede tener varias casas, lo que deseo hacer es que me muestre 5 personas con la ultima casa que compraron ordenado por fecha_compra descendientemente y los campos a mostrar serian nombre casa y fecha_compra :
Código sql:
Ver original
  1. SELECT personas.nombre, t1.fecha, casas.casa FROM personas
  2.   INNER JOIN casas ON casas.propietario = personas.id
  3.   INNER JOIN (SELECT MAX(fecha_compra) fecha, propietario FROM casas GROUP BY propietario)t1
  4.    ON t1.propietario = personas.id AND t1.fecha = casas.fecha_compra
  5. ORDER BY t1.fecha DESC LIMIT 5

explicación: primero elegimos la última fecha de cada propietario. Luego un inner join entre todos los datos con las dos tablas para poder sacar los datos.

Esto funcionará, creo (no lo he probado), si propietario de la tabla casas es un numero relacionado con el primary key de la tabla personas, id. Si lo que tienes escrito es el nombre en propietario, deberías hacer la relación con personas.nombre.
  #4 (permalink)  
Antiguo 10/03/2009, 02:13
 
Fecha de Ingreso: septiembre-2008
Mensajes: 16
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Select a 2 tablas o agregar campo?

me podrias explicar lo que hace esa consulta? cada paso?
  #5 (permalink)  
Antiguo 10/03/2009, 02:39
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Select a 2 tablas o agregar campo?

Código sql:
Ver original
  1. SELECT personas.nombre, t1.fecha, casas.casa FROM personas
  2.   INNER JOIN casas ON casas.propietario = personas.id
  3.   INNER JOIN (SELECT MAX(fecha_compra) fecha, propietario FROM casas GROUP BY propietario)t1
  4.    ON t1.propietario = personas.id AND t1.fecha = casas.fecha_compra
  5. ORDER BY t1.fecha DESC LIMIT 5

1) el centro de la cebolla: busco la última fecha de cada propietario:
SELECT Max(fecha_compra) fecha, propietario FROM casas GROUP BY propietario
y nombro esa consulta con el alias t1.
2) hago un cruce mediante inner join entre la tabla personas y la tabla casas uniendo por casas.propietario y personas.id, y
3) hago un cruce también con inner join de esas tablas ya cruzadas con la consulta t1, obligando a que coincidan el máximo y el propietario (con AND) de t1 con los del cruce de esas dos tablas
4) luego ordeno descendente el resultado de ese cruce por t1.fecha y limito a los 5 primeros.
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 18:28.