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

INNER JOIN pero...

Estas en el tema de INNER JOIN pero... en el foro de Mysql en Foros del Web. estimados. tengo dos tablas autos .id .nombre modelos .id .nombre .id_auto .predeterminado (1/0) quisiera mostrar los autos relacionados con sus modelos, pero mostrando el modelo ...
  #1 (permalink)  
Antiguo 27/11/2009, 13:35
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 4 meses
Puntos: 1
INNER JOIN pero...

estimados.
tengo dos tablas

autos
.id
.nombre

modelos
.id
.nombre
.id_auto
.predeterminado (1/0)

quisiera mostrar

los autos relacionados con sus modelos, pero mostrando el modelo predeterminado, pero en caso de que no este especificado ningun modelo predeterminado, que muestre cualquiera de los que tiene relacionados.

vale aclarar que si el modelo es predeterminado se le pone un 1 y sino un 0

probe con esta consulta, pero me deja afuera aquellas relaciones que no tienen modelo predeterminado

SELECT * FROM autos
INNER JOIN modelos ON modelos.id_auto = autos.id AND modelos.predeterminado = 1

en resumen quiero darle "prioridad" a aquellos modelos que tienen predeterminado = 1

uff.. ahora si

gracias!!
__________________
On error no hago nada porque deje de fumar...
  #2 (permalink)  
Antiguo 27/11/2009, 15:31
 
Fecha de Ingreso: septiembre-2009
Mensajes: 2
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: INNER JOIN pero...

En primer lugar, lo que noto es que el select que estas haciendo, si bien relaciona las tablas por el id, no esta trayendo el campo "predeterminado" de la tabla modelos. Para traer los campos de la tabla "auto" y el campo predeterminado de la tabla "modelo" que tengan como valor 1, el select tendria que ser:

select a.id, a.nombre, m.predeterminado
from autos a
inner join modelos m on a.id = m.id
where m.predeterminado = 1

Lo que no logro entender bien es a qué te referís con "en caso de que no este especificado ningun modelo predeterminado, que muestre cualquiera de los que tiene relacionados". Aclara un poco ese punto así te puedo seguir ayudando...

Un abrazo compañero
  #3 (permalink)  
Antiguo 27/11/2009, 18:50
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 4 meses
Puntos: 1
Respuesta: INNER JOIN pero...

gracias leonetardo! te explico denuevo

un auto puede tener varios modelos hasta ahi estamos perfectos con la relacion
INNER JOIN modelos ON modelos.id_auto = autos.id

el tema es que necesito mostrar prioritariamente los modelos que tiene predeterminado = 1

a ver un caso practico
un auto tiene 10 modelos (todos los modelos tienen predeterminado = 0)
en este caso habria que mostar el primer modelo

y en este otro caso
un auto tiene 10 modelos (9 tienen predeterminado = 0 y 1 solo tiene predeterminado=1)
ese unico es el que necesito mostrar!

ahora si?
__________________
On error no hago nada porque deje de fumar...
  #4 (permalink)  
Antiguo 27/11/2009, 18:52
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 4 meses
Puntos: 1
Respuesta: INNER JOIN pero...

autos
-volkswagen bora (id=100, predeterminado=1)
(hay muchos bora pero solo 1 es predeterminado)
-volkswagen passat (id=45, predeterminado=0)
(hay muchos passat pero ninguo predeterminado asi que muestro cualquiera)
__________________
On error no hago nada porque deje de fumar...
  #5 (permalink)  
Antiguo 28/11/2009, 09:54
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: INNER JOIN pero...

SELECT * FROM (SELECT * FROM autos
INNER JOIN modelos ON modelos.id_auto = autos.id ORDER BY autos.nombre, modelos.predeterminado DESC)t1 GROUP BY t1.autos.nombre

No lo he probado. Primero seleccionas todos modelos y ordenas descendente por el campo predeterminado. Luego haces una selección de esos datos agrupando por el campo nombre de la tabla autos, con lo que te mostrará sólo el primero de cada nombre, que debería ser el predeterminado 1, o, si no lo hay, un predeterminado cero.
  #6 (permalink)  
Antiguo 29/11/2009, 08:44
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 22 años, 4 meses
Puntos: 1
Respuesta: INNER JOIN pero...

perfecto!! gracias
__________________
On error no hago nada porque deje de fumar...
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:09.