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

Consulta complicada

Estas en el tema de Consulta complicada en el foro de Mysql en Foros del Web. Para que se entienda perfectamente lo que quiero hacer os muestro las diferentes tablas que interfieren en la consulta. IMAGENES: -path -nombre ..... -id_vehiculo -id_foto ...
  #1 (permalink)  
Antiguo 05/11/2012, 09:50
 
Fecha de Ingreso: noviembre-2012
Mensajes: 5
Antigüedad: 11 años, 5 meses
Puntos: 0
Consulta complicada

Para que se entienda perfectamente lo que quiero hacer os muestro las diferentes tablas que interfieren en la consulta.

IMAGENES:
-path
-nombre
.....
-id_vehiculo
-id_foto
-orden

AUTOS:
-id
-id_marca
-modelo
.....

MARCAS:
-id_marca
-nombre

CONSULTA:
- Datos que quiero mostrar: Marca.nombre, Auto.modelo, Imagen.path
- Quiero de cada auto su marca modelo y el path de la imagen CON el orden mas alto (Es la imagen de perfil que es la primera que se muestra).
El problema que tengo es conseguir coger la imagen con mas orden de cada auto ya que no encuentro la manera de hacer la consulta.

SELECT autos.model,
marcas.nombre,
imagenes.path
FROM autos, marcas, imagenes
WHERE autos.id_marca = marcas.id_marca && autos.id = imagenes.id_vehiculo

Alguien me ayuda?
Gracias!
  #2 (permalink)  
Antiguo 05/11/2012, 10:03
 
Fecha de Ingreso: abril-2009
Ubicación: en un lugar de la mancha
Mensajes: 236
Antigüedad: 15 años
Puntos: 38
Respuesta: Consulta complicada

Código MySQL:
Ver original
  1. SELECT A.model,
  2. M.nombre,
  3. I.path
  4. FROM autos A
  5. INNER JOIN marcas M ON A.id_marca = M.id_marca
  6. INNER JOIN imagenes I ON I.id_vehiculo = A.id
  7. ORDER BY I.Nombre

En este ejemplo se ordenaran los resultados alfabeticamente ascendente por el nombre de la imagen si lo kieres descendente termina el query de esta forma

ORDER BY I.nombre DESC

esero te ayude, buena suerte

Última edición por gnzsoloyo; 05/11/2012 a las 10:08 Razón: Sin etiquetado
  #3 (permalink)  
Antiguo 05/11/2012, 10:15
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Información Respuesta: Consulta complicada

Lo primero es que debes usar INNER JOIN y no cruzar las tablas así por temas de eficiencia

Una forma que resuelve tu problema, aunque no es muy eficiente, es:

Código SQL:
Ver original
  1. SELECT *
  2. FROM autos A
  3. INNER JOIN marcas M ON A.id_marca = M.id_marca
  4. INNER JOIN imagenes I ON I.id_vehiculo = A.id
  5. WHERE I.ID_VEHICULO IN (
  6.              SELECT id_Vehiculo FROM (
  7.                           SELECT id_Vehiculo, MAX(orden) AS ord
  8.                           FROM Imagenes
  9.                           GROUP BY id_vehiculo))
  #4 (permalink)  
Antiguo 05/11/2012, 10:39
 
Fecha de Ingreso: noviembre-2012
Mensajes: 5
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Consulta complicada

Gracias por vuestras respuestas tan inmediatas.
Provando la consulta de Heimish2000 me sale un error: Every derived table must have its own alias.
Como puedo solucionarlo ya que le pongo un alias pero sigue dandome el error.
Gracias
  #5 (permalink)  
Antiguo 05/11/2012, 10:44
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: Consulta complicada

Algo así

Código MySQL:
Ver original
  1.     FROM autos A
  2.     INNER JOIN marcas M ON A.id_marca = M.id_marca
  3.     INNER JOIN imagenes I ON I.id_vehiculo = A.id
  4.     WHERE I.ID_VEHICULO IN (
  5.                  SELECT A.id_Vehiculo FROM (
  6.                               SELECT id_Vehiculo, max(orden) AS ord
  7.                               FROM Imagenes
  8.                               GROUP BY id_vehiculo) AS A)
  #6 (permalink)  
Antiguo 05/11/2012, 10:57
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, 4 meses
Puntos: 2658
Respuesta: Consulta complicada

Cita:
Iniciado por korshack Ver Mensaje
Gracias por vuestras respuestas tan inmediatas.
Provando la consulta de Heimish2000 me sale un error: Every derived table must have its own alias.
Como puedo solucionarlo ya que le pongo un alias pero sigue dandome el error.
Gracias
Para que te quede claro, eso significa, por empezar, que toda tabla derivada (producto de una subconsulta en un FROM), debe tener un alias. siempre. Es una regla general de todos los DBMS.
Por otro lado significa que estás haciendo Copy+Paste, sin molestarte en verificar si el código que te pasan está correctamente escrito o no.
¿No sería mejor, para tu correcto aprendizaje, que antes de usar un código verificaras tu mismo si está bien escrito?
__________________
¿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; 05/11/2012 a las 11:05
  #7 (permalink)  
Antiguo 05/11/2012, 11:01
 
Fecha de Ingreso: noviembre-2012
Mensajes: 5
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Consulta complicada

He añadido el group by para que me muestre solo 1 vez pero me coge la imagen con orden 1 no la mas grande, que raro.

Cita:
SELECT *
FROM autos A
INNER JOIN marcas M ON A.id_marca = M.id_marca
INNER JOIN imagenes I ON I.id_vehiculo = A.id
WHERE I.ID_VEHICULO IN (
SELECT A.id_Vehiculo FROM (
SELECT id_Vehiculo, max(orden) AS ORD
FROM Imagenes
GROUP BY id_vehiculo) AS A)
GROUP BY A.id

Etiquetas: select, 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 06:04.