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

Select a dos tablas

Estas en el tema de Select a dos tablas en el foro de Mysql en Foros del Web. Maestros tengo el siguiente problema Estoy haciendo un select a dos tablas: habitacion , imagen_habitacion . El campo en común es num_hab . En la ...
  #1 (permalink)  
Antiguo 02/07/2014, 22:24
 
Fecha de Ingreso: julio-2007
Mensajes: 287
Antigüedad: 16 años, 9 meses
Puntos: 4
Pregunta Select a dos tablas

Maestros tengo el siguiente problema
Estoy haciendo un select a dos tablas: habitacion, imagen_habitacion. El campo en común es num_hab. En la tabla imagen_habitacion guardo todas las fotos de cada habitacion. Por lo tanto mi consulta debería entregarme los datos de una habitación más todas las fotos que correspondan a esa habitación.

Me esta mostrando los datos de la habitación y Una sola foto, siendo que en algunos casos una habitación tiene hasta 6 fotos.

Comparto acá la query a ver quien me da una mano:

Código MySQL:
Ver original
  1. SELECT h.id_habitacion, h.nombre, h.num_hab, h.precio_hab, h.caracteristicas, i.id_imagen, i.num_hab,
  2. i.nombre_imagen, i.ruta
  3. FROM habitacion h, imagen_habitacion i where i.num_hab = h.num_hab group by h.nombre desc;

Última edición por gnzsoloyo; 03/07/2014 a las 06:28
  #2 (permalink)  
Antiguo 03/07/2014, 01:32
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Select a dos tablas

Código MySQL:
Ver original
  1. SELECT h.id_habitacion,
  2.              h.nombre,
  3.              h.num_hab,
  4.              h.precio_hab,
  5.              h.caracteristicas,
  6.              i.id_imagen,
  7.              i.num_hab,
  8.              i.nombre_imagen,
  9.              i.ruta
  10. FROM habitacion h
  11.        INNER JOIN imagen_habitacion i
  12.                    ON i.num_hab = h.num_hab
  13. ORDER BY h.nombre desc;

Intenta esto.

Que intención tenias con "group by h.nombre desc"?

Incluso podrías usar LEFT JOIN por si hay alguna habitación sin fotos.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 03/07/2014, 06:23
 
Fecha de Ingreso: julio-2007
Mensajes: 287
Antigüedad: 16 años, 9 meses
Puntos: 4
Respuesta: Select a dos tablas

Estimado, no funciona. Me da el mismo resultado.
  #4 (permalink)  
Antiguo 03/07/2014, 06: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: Select a dos tablas

Cita:
mi consulta debería entregarme los datos de una habitación más todas las fotos que correspondan a esa habitación.
En ese caso no puedes agrupar, y deberás recibir más de un registro para la misma habitación, y resolverlo por programación. El GROUP BY sobre un sólo campo devolverá siempre un único registro por cada valor diferente de ese campo, descartando todos los demás. Adicionalmente sólo devolverá el primero que encuentre, y no los restantes.
Ese no es un error, es el comportamiento normal y esperado de GROUP BY...
Código MySQL:
Ver original
  1.     h.id_habitacion,
  2.     h.nombre,
  3.     h.num_hab,
  4.     h.precio_hab,
  5.     h.caracteristicas,
  6.     IFNULL(i.id_imagen, '') id_imagen,
  7.     IFNULL(i.nombre_imagen, '') nombre_imagen,
  8.     IFNULL(i.ruta, '') ruta
  9. FROM habitacion h LEFT JOIN imagen_habitacion i ON i.num_hab = h.num_hab;

Excepcionalmente, pordrías obtener todos los valores de ids de imagenes, nombres y rutas, en un sólo campo, pero luego deberías, por programación, separar cada uno de esos valores para usarlos. Eso se hace con la función GROUP_CONCAT(), pero eEn definitiva sería tanto trabajo comol recorrer toda la tabla de resultados.
Código MySQL:
Ver original
  1.     h.id_habitacion,
  2.     h.nombre,
  3.     h.num_hab,
  4.     h.precio_hab,
  5.     h.caracteristicas,
  6.     GROUP_CONCAT(i.id_imagen) id_imagen,
  7.     GROUP_CONCAT(i.nombre_imagen) nombre_imagen,
  8.     GROUP_CONCAT(i.ruta) ruta
  9. FROM habitacion h LEFT JOIN imagen_habitacion i ON i.num_hab = h.num_hab;
__________________
¿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 03/07/2014, 07:13
 
Fecha de Ingreso: julio-2007
Mensajes: 287
Antigüedad: 16 años, 9 meses
Puntos: 4
Respuesta: Select a dos tablas

gnzsoloyo
creo que la alternativa de hacerlo con GROUP_CONCAT podría resultar, pero no se como hacer esa programación de la que hablas para obtener el resultado deseado.

No se si tengas tiempo y ganas de ayudarme a resolverlo de esa manera.
  #6 (permalink)  
Antiguo 03/07/2014, 07:20
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: Select a dos tablas

La parte de programación deberás consultarla en el foro del lenguaje que estés trabajando.
Programación es OFF-TOPIC en este foro.

No es difícil...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campo, select, sql, tabla, tablas
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:53.