[Php-avanzado] Sql con varias tablas

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Jue Nov 27 11:43:16 ART 2008


Hola Edwin,

El jue, 27-11-2008 a las 05:06 -0800, Edwin Beecher escribió:
> Leo: modifique las estructuras de las tablas y las querys. Si tengo las siguientes tablas:
> 
> autos: dominio, cod_mod, anio, tipo, etc...
> marcas: cod_mar, desc_mar
> modelos: cod_mar, cod_mod, desc_mod

	Esa manía de hacer referencia a la tabla en el nombre del campo...
después hay que tipear muuuucho más...

> 1. Y quiero ver todos los autos ordenados por descripcion de marca y
> modelo
> La siguiente query esta bien ? esta mal ? se puede mejorar ? (asi como
> esta anda bien)
> 
> SELECT * FROM autos LEFT JOIN modelos using(cod_mod) JOIN marcas
> USING(cod_mar) ORDER BY desc_mar, desc_mod LIMIT 0, $total;

	Dado que por restricciones del problema no habrá modelos sin marca, ni
autos sin modelo, esta query se optimiza cambiando el LEFT JOIN por un
un INNER JOIN, poniendo todas las tablas en el FROM separadas por comas.

	Por otra parte, esta query funciona sin hacer el LEFT JOIN sobre dos
campos, con tu nueva estructura de tablas... lo cual la haría más
eficiente por no tener un vínculo redundante.

	Otra optimización consiste en proyectar solo los campos que necesitás,
y no todo con *... aunque necesites ver todo, tenés en esta salida
repetidas las columnas de id_modelo y id_marca porque están en 2 tabla
cada una.

> 2. Y si quiero ver todos los autos DE UNA DETERMINADA MARCA ordenados
> por descripcion de marca y modelo ?
> 
> SELECT * FROM autos LEFT JOIN modelos using(cod_mod) JOIN marcas
> USING(cod_mar) WHERE marcas.cod_mar = $cod_mar ORDER BY desc_mar,
> desc_mod
> LIMIT 0, $total;

	Del WHERE en adelante se ve bien. Para atrás, las mismas
consideraciones del punto 1.

> 3. como hago un AS para que la columna desc_mar sea 'MARCA' y la
> columna desc_mod sea 'MODELO' ?

	Así:

SELECT  desc_mod as MODELO, ... y el resto de los campos, en el orden
que más te convenga.

> Gracias

	Por nada!
-- 
Leonardo Tadei
leonardot en pegasusnet.com.ar
http://blog.pegasusnet.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key



Más información sobre la lista de distribución Php-avanzado